6个版本
使用旧的Rust 2015
0.3.1 | 2019年7月5日 |
---|---|
0.3.0 | 2019年6月2日 |
0.2.1 | 2019年6月2日 |
0.2.0 | 2019年2月19日 |
0.1.1 | 2019年1月14日 |
#1018 in Rust模式
27KB
389 行
json-query
注意
版本0.3.1标志着json-query的终结。 未来的版本将以新的名称jq-rs发布。
此Rust包通过其C API提供对jq 1.6的编程访问。
通过利用jq,我们可以使用jq的过滤DSL从json字符串中提取和转换数据。
use json_query;
// ...
let res = json_query::run(".name", r#"{"name": "test"}"#);
assert_eq!(res, Ok("\"test\"".to_string()));
除了使用json_query::run()
运行一次性程序外,您还可以使用json_query::compile()
编译一个jq程序,并用不同的输入重用它。
use json_query;
let tv_shows = r#"[
{"title": "Twilight Zone"},
{"title": "X-Files"},
{"title": "The Outer Limits"}
]"#;
let movies = r#"[
{"title": "The Omen"},
{"title": "Amityville Horror"},
{"title": "The Thing"}
]"#;
let mut program = json_query::compile("[.[].title] | sort").unwrap();
assert_eq!(
r#"["The Outer Limits","Twilight Zone","X-Files"]"#,
&program.run(tv_shows).unwrap()
);
assert_eq!(
r#"["Amityville Horror","The Omen","The Thing"]"#,
&program.run(movies).unwrap()
);
运行方法的返回值是json字符串,因此如果您想处理表示的实际数据类型,则需要解析它。因此,您可能希望将此库与serde_json或类似的库一起使用。
例如,我们想从一组对象中提取数字
use json_query;
use serde_json::{self, json};
// ...
let data = json!({
"movies": [
{ "title": "Coraline", "year": 2009 },
{ "title": "ParaNorman", "year": 2012 },
{ "title": "Boxtrolls", "year": 2014 },
{ "title": "Kubo and the Two Strings", "year": 2016 },
{ "title": "Missing Link", "year": 2019 }
]
});
let query = "[.movies[].year]";
// program output as a json string...
let output = json_query::run(query, &data.to_string()).unwrap();
// ... parse via serde
let parsed: Vec<i64> = serde_json::from_str(&output).unwrap();
assert_eq!(vec![2009, 2012, 2014, 2016, 2019], parsed);
目前几乎没有公开jq cli的选项或标志。实际上提供的是在json块上执行jq程序的能力。请原谅我在整理细节时的混乱。
链接到libjq
当启用bundled
功能(默认为关闭)时,libjq
由jq-sys和jq-src提供并静态链接,这些需要PATH
中的autotools和gcc来构建。
如果您禁用了bundled
功能,则需要确保您的crate链接到libjq
,以便绑定正常工作。
有关如何与jq-syscrate共享链接提示的详细信息,请参阅jq-sys构建文档。
请注意,在启用或禁用
bundled
之间切换构建时,可能需要执行cargo clean
。我无法解释,但如果您不清理输出目录,有时捆绑构建会中断。
更新日志
v0.3.1 (2019-06-04)
注意:这是名为 json-query
的最终版本。未来的版本将以 jq-rs 的形式发布。
错误修复
v0.3.0 (2019-06-01)
- 添加了
json_query::compile()
。编译jq程序,然后重用它,运行多个输入。
v0.2.1 (2019-06-01)
- #1 在docs.rs上构建时启用了
bundled
功能。
v0.2.0 (2019-02-18)
- 更新 jq-sys 依赖到 v0.2.0 以获得更好的构建控制。
- 暂时采用2015版风格的导入。
重大变更
bundled
功能不再默认启用。
v0.1.1 (2019-01-14)
- 添加了额外的链接到cargo清单。
- 添加了一些基本文档。
- 添加了一个
bundled
功能,用于选择是否使用捆绑源。
0.1.0 (2019-01-13)
初始版本。
依赖关系
~1MB
~23K SLoC