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 编码
91,813 每月下载量
用于 13 个crate (11 个直接使用)
24KB
281 行
json_value_merge
提供一个接口来合并两个 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以讨论您想要更改的内容。
请确保根据需要更新测试。
许可证
依赖关系
~355–750KB
~17K SLoC