60 个版本
0.4.1 | 2024年6月30日 |
---|---|
0.4.0 | 2024年3月5日 |
0.3.1 | 2024年2月25日 |
0.2.44 | 2023年5月21日 |
0.1.7 | 2021年10月16日 |
#360 在 编码
每月下载量 234
用于 machaka
290KB
7K SLoC
XQ
JQ 完全使用 Rust 重新实现。
注意
此程序处于开发中。您可能希望使用 jq 的原始实现,或者 gojq 的纯 Go 实现,由 itchyny 构建,或者另一个名为 jaq 的 Rust 实现。
当前状态
- 大多数需要语法支持的 jq 组件都已实现并测试,包括从 jq 用户手册 中获取的查询。例外是导入和模块头。
- 缺少许多内置函数,包括那些需要内在实现。
- 需要更多的单元测试。大多数 CLI 选项都缺失。
- 支持 JSON 和 YAML 格式。
目标
- 学习 jq。
想法
-
由于我们使用 serde 来反序列化输入/序列化输出,我们应该能够轻松地支持任何具有 serde 实现的格式(并且具有多文档支持),除了那些需要 scheme(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用户手册,在CC BY 3.0下分发,版权所有 (C) 2012 Stephen Dolan。有关更多详细信息,请参阅mod.rs。
作者
许可协议
MIT。请参阅LICENSE文件。
依赖项
~11–20MB
~334K SLoC