我在创建一个递归函数来解析两个serde_yaml::Value变量并将它们合并时遇到了麻烦。在一个基本级别的对象上将它们合并组合起来很容易,但是子级别的值只是组合值的值。
给出:
let original:serde_yaml::Value = serde_yaml::from_str(r#"
keyA:
subKeyA:
- A
- B
- C
keyB: "one"
keyC: "a"
"#
).unwrap();
let add_or_modify_these_values:serde_yaml::Value = serde_yaml::from_str(r#"
keyA:
subKeyA:
- D
subKeyB:
- BA
keyB: "two"
keyC:
- A
- B
"#
).unwrap();
字符串
如何将它们合并组合起来,以便考虑所有嵌套属性,例如:
keyA:
subKeyA:
- A
- B
- C
- D
subKeyB:
- BA
keyB: "two"
keyC:
- A
- B
型
当有复杂的情况时(例如,不同的值类型,如keyC),我更喜欢用新的值类型替换原始的值类型。
编辑:我在这里也看了一个类似的json问题:How can I merge two JSON objects with Rust?,但是这个合并方法不会合并组合数组值,只会覆盖。
4条答案
按热度按时间xv8emn3q1#
我已经弄清楚了下面的转换(可能需要一些清理):
字符串
23c0lvtd2#
编辑:正确的答案已标记。将把这个留给JSON版本。
JSON版本:
字符串
9vw9lbht3#
下面是一个清理后的版本(与
#![feature(let_chains)]
一起使用):字符串
wydwbb8l4#
已经有一个清理过的版本,但是它使用了
#![feature(let_chains)]
,这并不理想。我提出了我自己的清理过的版本,我相信它更具可读性,并且更多地利用了match
语句。字符串