如何通过添加附加字段来改变 serde_json 值?
How to mutate serde_json value by adding additional fields?
所以我从某个地方得到了一个 serde Value
,我想在反序列化之前向 Value
添加额外的“字段”。我正在查看文档,但不知道如何操作。
更具体地说,假设我有一个 HashMap,我想将其值合并到 Value 中。
pub fn merge(v: &Value, fields: &HashMap<String, String>) -> Value
您需要提取地图(在 Value::Object
的情况下),复制它(因为您只接受 &Value
输入),更新它,然后将它重新包装在Value::Object
例如
pub fn merge(v: &Value, fields: &HashMap<String, String>) -> Value {
match v {
Value::Object(m) => {
let mut m = m.clone();
for (k, v) in fields {
m.insert(k.clone(), Value::String(v.clone()));
}
Value::Object(m)
}
v => v.clone(),
}
}
(如果发生冲突,这将用 fields
覆盖 v
的条目)。
所以我从某个地方得到了一个 serde Value
,我想在反序列化之前向 Value
添加额外的“字段”。我正在查看文档,但不知道如何操作。
更具体地说,假设我有一个 HashMap,我想将其值合并到 Value 中。
pub fn merge(v: &Value, fields: &HashMap<String, String>) -> Value
您需要提取地图(在 Value::Object
的情况下),复制它(因为您只接受 &Value
输入),更新它,然后将它重新包装在Value::Object
例如
pub fn merge(v: &Value, fields: &HashMap<String, String>) -> Value {
match v {
Value::Object(m) => {
let mut m = m.clone();
for (k, v) in fields {
m.insert(k.clone(), Value::String(v.clone()));
}
Value::Object(m)
}
v => v.clone(),
}
}
(如果发生冲突,这将用 fields
覆盖 v
的条目)。