rust - 如何通过添加其他字段来改变 serde_json 值?
问题描述
所以我有一个Value
来自某个地方的 serde,我想在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(),
}
}
(如果发生冲突,这将用 's 覆盖v
's 条目fields
)。
推荐阅读
- javascript - 如何在回调nodejs中停止流api
- go - 如何在眼镜蛇中设置以 -- 为前缀的命令名称
- php - 为什么 VS 代码没有检测 Laravel 刀片代码?
- python - 使用 Symfit 进行 ODE 拟合 - ValueError:操作数无法与重新映射的形状一起广播
- android - 在颤动中单击 TextFormField 后键盘正在关闭
- mysql - 当我使用选择命令时如何添加每行的名称
- r - 使用 sapply 输出 R 中回归循环的所有回归系数?
- reactjs - 使用 React Spring 对 div 进行动画切换
- sql - 使用简体中文字符在 Azure SQL NVarchar 列中通过拼音搜索
- c# - ASP Dotnet Core MVC Docker 连接到 Postgresql