#serde-json #json #merge #value #json-object #serde #path

json_value_merge

提供合并 serde_json::Value 对象的接口

14 个版本 (6 个稳定版)

2.0.0 2023年9月14日
1.2.0 2023年9月9日
1.1.2 2021年12月17日
1.1.0 2021年9月17日
0.1.1 2020年4月5日

#91 in 编码

Download history 21588/week @ 2024-03-14 21841/week @ 2024-03-21 17294/week @ 2024-03-28 15226/week @ 2024-04-04 14314/week @ 2024-04-11 19021/week @ 2024-04-18 25031/week @ 2024-04-25 22818/week @ 2024-05-02 22469/week @ 2024-05-09 26495/week @ 2024-05-16 27863/week @ 2024-05-23 28705/week @ 2024-05-30 22456/week @ 2024-06-06 22455/week @ 2024-06-13 23614/week @ 2024-06-20 18254/week @ 2024-06-27

91,813 每月下载量
用于 13 个crate (11 个直接使用)

MIT/Apache

24KB
281

json_value_merge

Actions Status semantic-release crates.io

提供一个接口来合并两个 json_serde::Value。

安装

[dependencies]
json_value_merge = "2.0"

用法

合并两个数组

extern crate json_value_merge;

use json_value_merge::Merge;
use serde_json::Value;

{
    let mut first_json_value: Value = serde_json::from_str(r#"["a","b"]"#).unwrap();
    let secound_json_value: Value = serde_json::from_str(r#"["b","c"]"#).unwrap();
    first_json_value.merge(&secound_json_value);
    assert_eq!(r#"["a","b","c"]"#, first_json_value.to_string());
}

合并两个对象

extern crate json_value_merge;

use json_value_merge::Merge;
use serde_json::Value;

{
    let mut first_json_value: Value =
        serde_json::from_str(r#"[{"value":"a"},{"value":"b"}]"#).unwrap();
    let secound_json_value: Value =
        serde_json::from_str(r#"[{"value":"b"},{"value":"c"}]"#).unwrap();
    first_json_value.merge(&secound_json_value);
    assert_eq!(
        r#"[{"value":"a"},{"value":"b"},{"value":"b"},{"value":"c"}]"#,
        first_json_value.to_string()
    );
}

在指定位置合并两个数组

extern crate json_value_merge;

use json_value_merge::Merge;
use serde_json::Value;

{
    let mut value_a: Value = serde_json::from_str(r#"{"my_array":[{"a":"t"}]}"#).unwrap();
    let value_b: Value = serde_json::from_str(r#"["b","c"]"#).unwrap();
    value_a.merge_in("/my_array", &value_b);
    assert_eq!(r#"{"my_array":[{"a":"t"},"b","c"]}"#, value_a.to_string());
}

在指定位置合并两个对象

extern crate json_value_merge;

use json_value_merge::Merge;
use serde_json::Value;

{
    let mut value_a: Value = serde_json::from_str(r#"{"my_array":[{"a":"t"}]}"#).unwrap();
    let value_b: Value = serde_json::from_str(r#"{"b":"c"}"#).unwrap();
    value_a.merge_in("/my_array/0", &value_b);
    assert_eq!(r#"{"my_array":[{"a":"t","b":"c"}]}"#, value_a.to_string());
}

构建新对象

extern crate json_value_merge;

use json_value_merge::Merge;
use serde_json::Value;

{
    let mut object: Value = Value::default();
    object.merge_in("/field", &Value::String("value".to_string()));
    object.merge_in("/object", &Value::Object(Map::default()));
    object.merge_in("/array/1", &Value::Object(Map::default()));
    object.merge_in("/array/2", &Value::Array(Vec::default()));
    object.merge_in("/array/*", &Value::String("wildcard".to_string()));
    object.merge_in("/root/*/item", &Value::String("my_item".to_string()));
    object.merge_in("///empty", &Value::Null);
    assert_eq!(r#"{"":{"":{"empty":null}},"array":[{},[],"wildcard"],"field":"value","object":{},"root":[{"item":"my_item"}]}"#, object.to_string());
}

将数组替换为对象

extern crate json_value_merge;

use json_value_merge::Merge;
use serde_json::Value;

{
    let mut json_value: Value = serde_json::from_str(r#"[{"array1":[{"field":"value1"}]}]"#).unwrap();
    let result = json_value.merge_in("/other_field", &Value::String("value".to_string()));
    assert_eq!(r#"{"other_field":"value"}"#,json_value.to_string());
}

贡献

欢迎提交pull请求。对于重大更改,请先提交一个issue以讨论您想要更改的内容。

请确保根据需要更新测试。

许可证

Apache MIT

依赖关系

~355–750KB
~17K SLoC