rust - 如何通过添加附加字段来改变 serde_json 值?

标签 rust serde

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

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

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

最佳答案

您需要提取 map (在 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 的条目)。

关于rust - 如何通过添加附加字段来改变 serde_json 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65356683/

相关文章:

closures - 为什么嵌套迭代器闭包不会从外部范围复制值

rust - 我如何使用 std::convert::Into 来转换可能会失败的东西?

rust - 如何使用 Serde 序列化具有顶级键的结构?

rust - 我怎样才能让 Serde 在反序列化期间从 arena 分配字符串?

rust - 如何使用 serde 将结构序列化为另一个 Rust 数据结构?

rust - 为什么我可以调用 File::open(...).read_to_end()?

file - 无法将文件导入 Rust 中的另一个文件

arrays - 仅使用标准库,是否有用于从 Rust 中的二维数组切片列的简短表示法?

rust - 如何用actix-web的Json类型解析 "implementation of serde::Deserialize is not general enough"?

json - 错误 : the type of this value must be known in this context (Rust)/serde_json Value