1个不稳定版本
0.0.0 | 2024年2月25日 |
---|
#37 在 #jq
40 每月下载量
245KB
6K SLoC
XQ
JQ 使用Rust纯实现。
注意
此程序处于开发中。您可能希望使用jq的原始实现,或者由itchyny构建的纯Go实现gojq,或者另一个Rust实现jaq。
当前状态
- jq的大部分需要语法支持的组件都实现了,嗯,并对从jq用户手册中取出的查询进行了测试。例外是导入和模块标题。
- 缺少许多内置函数,包括那些需要内部实现。
- 需要更多的单元测试。缺少大多数的CLI选项。
- 支持JSON和YAML格式。
目标
- 学习jq。
想法
-
由于我们使用serde来反序列化输入/序列化输出,我们应该能够轻松支持任何具有serde实现(并具有多文档支持)的格式,除了那些需要方案(protobuf、thrift等)。
-
作为一个库,我们应该能够将实现
Serialize
的任何内容作为输入类型,将实现Deserialize
的任何内容作为输出类型。因此,在理论上,我们应该能够编写一个可以处理以下内容的库;#[derive(Serialize)] struct GitHubRepo { user_name: String, repo_name: String, stars: usize, } #[derive(Deserialize)] struct User { name: String, total_stars: usize, } let repos: Vec<GitHubRepo> = fetch_repos(); let users: Vec<User> = xq::somefunction_slurp<GitHubRepo, User>(repos, r#" group_by(.user_name)[] | { name: .[0].user_name, total_stars: ([.[].stars] | add) } "#).collect();
我的意思是,这不是真正应该使用的东西。这只是可能且有趣的事情...不是吗?
安装和运行
您确定要使用此程序???它不是一个日常可用的阶段。尽管如果您想尝试,可以通过以下方式安装它:
$ cargo install xq
$ cat whatever.json | xq 'query goes here'
如果您希望下载预构建的二进制文件,可以从最新版本手动下载,或者使用cargo-binstall。无论哪种方式,依赖项的许可文本都包含在下载存档中about.html
文件中。
您也可以克隆此仓库到本地并运行
$ cargo install --path path-to-cloned-dir
$ cat whatever.json | xq 'query goes here'
。或者,
$ cat whatever.json | cargo run -- 'query goes here'
在克隆的目录中尝试它们,而无需安装。
卸载
$ cargo uninstall xq
如果您是通过cargo install
安装的,请卸载。如果您已克隆了存储库,请删除克隆的目录。
发布新版本
给自己留个备注。
$ git switch master # make sure you're on the master branch
$ cargo release patch # to dry-run the release
$ cargo release patch --execute # to actually execute the release
传递--workspace
以同时发布工作空间成员。
致谢
- 虽然这根本不是一种直接的翻译,但我参考了由Stephen Dolan构建的jq和由itchyny构建的gojq。感谢您提供的有趣产品!
鸣谢
- 测试用例取自tests/from_manual,该测试用例基于jq 用户手册,由 Stephen Dolan 分布,许可协议为CC BY 3.0。有关更多详细信息,请参阅mod.rs。
作者
LICENSE
MIT。请参阅LICENSE文件。
依赖项
~10–20MB
~320K SLoC