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编码

Download history 4/week @ 2024-05-02 14/week @ 2024-05-16 30/week @ 2024-05-23 2/week @ 2024-05-30 7/week @ 2024-06-06 2/week @ 2024-06-13 82/week @ 2024-06-20 225/week @ 2024-06-27 84/week @ 2024-07-04 61/week @ 2024-07-11 7/week @ 2024-07-18 10/week @ 2024-07-25 97/week @ 2024-08-01 37/week @ 2024-08-08 90/week @ 2024-08-15

每月下载量 234
用于 machaka

MIT 许可证

290KB
7K SLoC

CI crates.io

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。感谢您有趣的产品!

鸣谢

作者

Mi_Sawa

许可协议

MIT。请参阅LICENSE文件。

依赖项

~11–20MB
~334K SLoC