我正在尝试将平面结构变成如下所示:
let flat = vec![
Foo {
a: "abc1".to_owned(),
b: "efg1".to_owned(),
c: "yyyy".to_owned(),
d: "aaaa".to_owned(),
},
Foo {
a: "abc1".to_owned(),
b: "efg2".to_owned(),
c: "zzzz".to_owned(),
d: "bbbb".to_owned(),
}];
通过serde_json
看起来像这样的嵌套 JSON 对象:
{
"abc1": {
"efg1": {
"c": "hij1",
"d": "aaaa",
},
"efg2": {
"c": "zzzz",
"d": "bbbb",
},
}
}
(b
保证值在数组中是唯一的)
如果我只需要一层,我会做这样的事情:
let map = flat.into_iter().map(|input| (input.a, NewType {
b: input.b,
c: input.c,
d: input.d,
})).collect::<Hashmap<String, NewType>>();
let out = serde_json::to_string(map).unwrap();
然而,这似乎并没有扩展到多层(即(String, (String, NewType))
不能收集到Hashmap<String, Hashmap<String, NewType>>
)
在将条目转换为 json 之前,有没有比手动循环并将条目插入哈希映射更好的方法?