#json-object #json #json-key #serde-json #object #flatten #serde

flatten-json-object

轻量级的Rust库,用于扁平化JSON对象

9个版本 (5个重大更新)

0.6.1 2022年4月16日
0.6.0 2022年4月15日
0.5.0 2022年4月13日
0.4.0 2022年4月12日
0.1.2 2022年4月5日

#1773编码

Download history 926/week @ 2024-03-14 1292/week @ 2024-03-21 727/week @ 2024-03-28 980/week @ 2024-04-04 750/week @ 2024-04-11 807/week @ 2024-04-18 930/week @ 2024-04-25 1095/week @ 2024-05-02 661/week @ 2024-05-09 1063/week @ 2024-05-16 669/week @ 2024-05-23 873/week @ 2024-05-30 792/week @ 2024-06-06 995/week @ 2024-06-13 806/week @ 2024-06-20 1105/week @ 2024-06-27

每月下载量3,840次
3 crates 中使用

MIT 协议

23KB
395

licence crates.io docs.rs ci

用于扁平化JSON对象的强大Rust库

给定一个JSON对象,它会生成另一个包含所有嵌套对象和数组的扁平化对象。用于分隔连接键的字符串以及数组格式化方式可以配置。

注意

  • 默认情况下会忽略空数组和对象,但这是可配置的。
  • 空键 "" 和 JSON null 值可以无问题使用并且被保留。
  • 在扁平化对象后,如果两个或更多键最终相同,则返回错误。
  • 传递给扁平化的JSON值必须是一个对象。虽然对象可以包含任何有效的JSON。

用法

在您的Cargo.toml中

[dependencies]
flatten-json-object = "0.6.1"

示例

use flatten_json_object::ArrayFormatting;
use flatten_json_object::Flattener;
use serde_json::json;

let obj = json!({
    "a": {
        "b": [1, 2.0, "c", null, true, {}, []],
        "" : "my_key_is_empty"
    },
    "" : "my_key_is_also_empty"
});
assert_eq!(
    Flattener::new()
        .set_key_separator(".")
        .set_array_formatting(ArrayFormatting::Surrounded {
            start: "[".to_string(),
            end: "]".to_string()
        })
        .set_preserve_empty_arrays(false)
        .set_preserve_empty_objects(false)
        .flatten(&obj)?,
    json!({
        "a.b[0]": 1,
        "a.b[1]": 2.0,
        "a.b[2]": "c",
        "a.b[3]": null,
        "a.b[4]": true,
        "a.": "my_key_is_empty",
        "": "my_key_is_also_empty",
    })
);

examples/from_stdin.rs 中可以找到一个简单的示例,该示例从 stdin 读取 JSON 并将转换后的扁平化 JSON 输出到 stdout。要运行它,请执行 cargo run --example from_stdin

依赖

~0.6–1.4MB
~32K SLoC