首页 > 解决方案 > 如何通过添加其他字段来改变 serde_json 值?

问题描述

所以我有一个Value来自某个地方的 serde,我想在Value之后反序列化之前添加额外的“字段”。我正在浏览文档,但我不知道该怎么做。

更具体地说,假设我有一个 HashMap,我想将其值合并到 Value 中。

pub fn merge(v: &Value, fields: &HashMap<String, String>) -> Value

标签: rustserde

解决方案


您需要提取地图(在这种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(),
    }
}

(如果发生冲突,这将用 's 覆盖v's 条目fields)。


推荐阅读