7 个版本
0.2.0 | 2023 年 2 月 19 日 |
---|---|
0.1.5 | 2023 年 2 月 5 日 |
0.1.4 | 2021 年 11 月 2 日 |
0.1.3 | 2020 年 9 月 13 日 |
#593 在 编码
每月 98 下载量
在 rs-youtube 中使用
22KB
150 行
serde-query
欢迎使用 serde-query,这是一个允许您为数据编写类似 jq 查询的 Rust 库。
为什么要使用 serde-query?
- 效率:使用 serde-query,您可以高效地提取您所需的内容,而不会浪费内存。
- 有用的错误消息:当查询失败时,您将获得清晰、简洁的错误消息,告诉您失败发生的位置和原因。
- 灵活性:serde-query 支持任何与 serde 兼容的数据格式。
入门指南
要开始使用 serde-query,请使用 Cargo 将其添加到您的 Rust 项目中
cargo add serde-query
或者,将其添加到您的 Cargo.toml
[dependencies]
serde-query = "0.2.0"
示例
数组查询
use serde_query::{DeserializeQuery, Query};
#[derive(DeserializeQuery)]
struct Data {
#[query(".commits.[].author")]
authors: Vec<String>,
#[query(".count")]
count: usize,
}
let document = serde_json::json!({
"commits": [
{ "author": "Kou", "hash": 0x0202 },
{ "author": "Kasumi", "hash": 0x1013 },
{ "author": "Masaru", "hash": 0x0809 },
],
"count": 3,
}).to_string();
// You can use `Query<T>` as a `Deserialize` type for any `Deserializer`
// and convert the result to the desired type using `From`/`Into`.
let data: Data = serde_json::from_str::<Query<Data>>(&document)?.into();
assert_eq!(data.authors, vec!["Kou", "Kasumi", "Masaru"]);
assert_eq!(data.count, 3);
错误
use serde_query::Deserialize;
#[derive(Debug, Deserialize)]
struct Data {
// missing field
#[query(".author.name")]
author_name: String,
// typo
#[query(".commit.commiter.name")]
committer_name: String,
// type error
#[query(".author.id")]
id: String,
}
let error = serde_json::from_str::<Data>(INPUT).unwrap_err();
assert_eq!(
error.to_string(),
r#"
Queries failed for fields: 'author_name', 'committer_name', 'id'
1. Query for field 'author_name' failed at '.author': missing field 'name'
2. Query for field 'committer_name' failed at '.commit': missing field 'commiter'
3. Query for field 'id' failed at '.author.id': invalid type: integer `5635139`, expected a string at line 34 column 17
"#
.trim_start()
);
注意
此库为每个查询段生成 Rust 类型(例如,.commit
、.commit.message
等),可能会导致二进制膨胀和编译时间变长。
许可证
根据以下任一许可证授权
- Apache License,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确表示,否则根据 Apache-2.0 许可证定义,您提交的任何有意提交以包含在作品中的贡献,将根据上述方式双许可,不附加任何其他条款或条件。
依赖项
~110–590KB