如何使用 Rust 合并两个 JSON 对象?

2023-12-22

我有两个 JSON 文件:

JSON 1

{
  "title": "This is a title",
  "person" : {
    "firstName" : "John",
    "lastName" : "Doe"
  },
  "cities":[ "london", "paris" ]
}

JSON 2

{
  "title": "This is another title",
  "person" : {
    "firstName" : "Jane"
  },
  "cities":[ "colombo" ]
}

我想将 #2 合并到 #1 中,其中 #2 覆盖 #1,产生以下输出:

{
  "title": "This is another title",
  "person" : {
    "firstName" : "Jane",
    "lastName" : "Doe"
  },
  "cities":[ "colombo" ]
}

我检查了箱子json 补丁 https://github.com/idubrov/json-patch它可以做到这一点,但它不能针对稳定的 Rust 进行编译。是否可以做类似的事情serde_json https://github.com/serde-rs/json和稳定的 Rust?


既然你想使用json 补丁 https://github.com/idubrov/json-patch,我假设您正在专门寻找JSON 合并补丁 (RFC 7396) https://www.rfc-editor.org/rfc/rfc7396实施,因为这就是那个箱子所实施的。在这种情况下,合并对象应该取消设置那些在补丁中对应值为null,其他答案中的代码示例未实现。

解释这一点的代码如下。我修改了补丁删除了person.lastName键,将其设置为null作为演示。也不需要unwrap() the Option由返回as_object_mut(),与其他答案之一不同。

use serde_json::{json, Value};

fn merge(a: &mut Value, b: Value) {
    if let Value::Object(a) = a {
        if let Value::Object(b) = b {
            for (k, v) in b {
                if v.is_null() {
                    a.remove(&k);
                }
                else {
                    merge(a.entry(k).or_insert(Value::Null), v);
                }
            } 

            return;
        }
    }

    *a = b;
}

fn main() {
    let mut a = json!({
        "title": "This is a title",
        "person" : {
            "firstName" : "John",
            "lastName" : "Doe"
        },
        "cities":[ "london", "paris" ]
    });

    let b = json!({
        "title": "This is another title",
        "person" : {
            "firstName" : "Jane",
            "lastName": null
        },
        "cities":[ "colombo" ]
    });

    merge(&mut a, b);
    println!("{:#}", a);
}

预期输出是

{
  "cities": [
    "colombo"
  ],
  "person": {
    "firstName": "Jane"
  },
  "title": "This is another title"
}

Notice person.lastName已取消设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Rust 合并两个 JSON 对象? 的相关文章

  • 将 JSON 反序列化为表

    我需要根据通过 API 接收的数据填充 ABAP 中的表 我正在使用以下 ABAP 函数从 json 填充现有的 ABAP 表 JSON 是正确的 表中包含相应的表 ui2 cl json gt deserialize EXPORTING
  • Flutter:将字符串转换为 Map

    我正在使用 SQFlite 在本地存储数据 我有一个表 其中有一个名为 json 的字段 该字段的类型为 TEXT 并存储转换为字符串的 json 例如 name Eduardo Age 23 性别男 到目前为止 一切正常 但随后我需要从数
  • 通过 json 模式 Sequelize 定义模型

    我想通过json制作Sequelize模型广告 我在文档中找不到是否可以通过 json 模式进行模型声明 对于这么强大的库 没有这样的功能很奇怪 也许我找错地方了 只是试图找到同一问题的答案 模式示例 类型 对象 模式 http json
  • 从 Rust 中的函数返回异步函数

    第 1 部分 返回异步函数的函数的签名应该是什么 pub async fn some async func arg str What should be sig here pub fn higher order func action st
  • 如何将此数据编码为 JSON 中的父/子结构

    我正在使用 d3 js 将动物 有机体 家族 一次最多 4000 个 可视化为树形图 尽管数据源也可以是目录列表或命名空间对象列表 我的数据如下 json organisms name Hemiptera Miridae Kanakamir
  • 根据 .NET Core 2.1 中的更改重新加载 Serilog JSON 配置

    我目前正在开发 ASP NET Core 2 1 应用程序 并使用 Serilog 进行日志记录 我想在运行时为我的 Serilog 实现重新加载应用程序设置文件 我的目标是在运行时更改日志级别 例如我写入minimumLevelDebug
  • 使用 NewtonSoft 在一行中生成 JSON 对象

    我正在使用 JSON 库牛顿软件 http nuget org packages newtonsoft json生成 JSON 字符串 JObject out JObject FromObject new typ photos return
  • 如何使用shell脚本从json字符串中grep特定字段值[重复]

    这个问题在这里已经有答案了 下面是文件中可用的 JSON 字符串 我需要从中提取值status在 shell 脚本中 预期输出 status success 响应 json eventDate null dateProccessed nul
  • 在 ASP.NET Core 2.0 Web Api 中返回“原始”json

    AFAIK 在 ASP NET Core Web Api 中返回数据的标准方法是使用IActionResult并提供例如一个OkObject结果 这对于对象来说效果很好 但是如果我以某种方式获得了一个 JSON 字符串 并且我只想将该 JS
  • 如何使用 jq 从多个嵌套数组中提取键

    SETUP 我试图弄清楚 jq 过滤器是如何工作的 但在找出嵌套数组时遇到了困难 使用下面的数据我无法做出平的 5 键输出 我可以得到 1 个键和 4 个空值 或者 4 个键和 1 个空值 但不能得到所有 5 个键 1 个键 4 个空值 R
  • 为什么 Nil 会增加一个枚举大小而不增加另一个枚举大小? Rust 枚举的内存是如何分配的?

    如果我定义以下枚举 Nil 不会增加枚举的大小 use std mem size of enum Foo Cons char enum Bar Cons char Nil println size of
  • 复杂对象MVC3的JSON序列化

    我有一个问题 我似乎不知道如何序列化类型的对象 public class SchedulingCalendarMonth public List
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • json_encode 返回 NULL?

    由于某种原因 项目 描述 返回NULL使用以下代码 这是我的数据库的架构 CREATE TABLE staff id int 11 NOT NULL AUTO INCREMENT name longtext COLL
  • 在不同端口上运行多个 actix 应用程序

    我正在尝试运行两个应用程序 一个在端口 3006 上进行管理 另一个在端口 8080 上提供数据 他们共享数据库池 缓存 对于 actix 1 0 我可以这样做 我不知道这是否是最好的方法 let server Server build F
  • JSON 解析错误:需要“STRING”

    我在用JSONLint http jsonlint com 解析一些 JSON 我不断收到错误 错误 第 1 行解析错误 产品 需要 STRING 却得到 未定义 这是代码 product code Abc123 description S
  • 编码:类型错误:write() 参数必须是 str,而不是 bytes

    我对 python 有初步的了解 但不清楚处理二进制编码问题 我正在尝试运行 firefox webextensions 示例中的示例代码 其中 python 脚本发送由 javascript 程序读取的文本 我不断遇到编码错误 蟒蛇代码是
  • 键绑定 - 鼠标中键与 Sublime Text 2

    有谁知道是否可以将鼠标中键绑定到 Sublime Text 2 中的操作 我知道可以进行一些鼠标交互 因为您可以使用后退和前进按钮 基本上 我将使用此按钮通过 sFTP 插件上传文件 这样我需要按下的按钮数量就会从 3 个减少到 1 个 目
  • 通过标识引用对象的标准方法(例如循环引用)?

    JSON 中是否有通过身份引用对象的标准方法 例如 具有大量 可能是循环 引用的图形和其他数据结构可以被合理地序列化 加载吗 Edit 我知道做一次性解决方案很容易 列出图中所有节点的列表 然后 我想知道是否有一个标准的 通用的解决方案来解
  • Hive:如何分解嵌入 CSV 文件中的 JSON 列?

    从 CSV 文件 带有标题和管道分隔符 中 我得到了以下两个内容 其中包含一个 JSON 列 内部有一个集合 如下所示 第一种情况 使用没有名称的 JSON 集合 ProductId IngestTime ProductOrders 918

随机推荐

  • 带优先级队列的 Dijkstra 算法

    在我的 Dijkstra 算法的实现中 我有 1 个包含所有节点的数组和 1 个包含所有节点的优先级队列 每当一个节点出队时 我都会用新的距离和它的来源更新所有相邻节点 这样我就可以回溯路径 优先级队列中的节点将更新为新距离 数组中的节点将
  • 包“@angular/cli”不是依赖项

    当我尝试运行命令时出现以下错误 ng update angular cli angular core allow dirty Repository is not clean Update changes will be mixed with
  • 如何对 BSD 套接字进行单元测试 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 BSD 套接字在 Ubuntu 中编写基于服务器 客户端的 C 应用程序 我使用 Google C 测试框架作为我的单元测
  • Mailjet Vars 空白数组引发错误

    array low price low stock goods gt 在我的邮件模板中 for item in var low price low stock goods tr td item good name td td item va
  • MySQL:您的 SQL 语法错误 |限制 0, 25

    我不明白这个错误 请大家帮助我 为什么我收到这个错误 我的查询有问题吗 这是错误 1064 你的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解要使用的正确语法 第 7 行 LIMIT 0 25 附近 这是我的查询
  • 如何将 Pandas DF 中的列表转换为字符串?

    我有一个熊猫数据框 其中一列包含一个列表 我希望该列是单个字符串 例如我的清单 one two three 应该简单地是 one two three df col df col astype str apply lambda x join
  • 使用 React js Modal 的动态内容

    我想使用 React js 模态获取动态内容我正在使用包react responsive modal 首先我通过地图渲染所有帖子 现在我希望当我单击单个帖子时 模式应该弹出并仅显示该特定帖子的标题和正文 现在我不知道如何在模态中获取单个帖子
  • 有没有办法将 C# 序列化对象读取到 Python 中?

    我有一个包含 C 序列化对象的二进制文件 我可以用 python 读取内容 但得到的结果类似于 T x00 x00 x00Test Jobs GenerateJobRequest POC Server xca x02 xa2 x02 t x
  • 去虚拟化非最终方法

    假设我有一个如下所示的类设置 class A public virtual void foo printf default implementation n class B public A public void foo override
  • CNContactViewController 取消按钮不起作用

    我正在尝试使用内置的新联系人 UI 但使用取消按钮时出现意外行为 下面的代码可以运行并调用新的联系人屏幕 但取消按钮只会清除屏幕条目 而不会从新的联系人屏幕中取消 在内置联系人应用程序中 点击取消将返回到联系人列表屏幕 我想要取消按钮来关闭
  • CSS将一个正方形分成4个三角形

    我目前正在尝试将一个正方形变成 4 个大小相等且具有悬停事件的三角形 我正在创建这样的三角形 right left top bottom position relative width 26px right before position
  • 升级到 Django 1.11 后,append_slash 不再起作用

    在 Django 1 9 和 Python 3 4 中 默认的 APPEND SLASH 工作正常 即我可以输入 localhost 8000 ideatree videos 并且会添加尾部斜杠 升级到 Django 1 11 和 Pyth
  • Java/zip:为什么 .jar 文件的创建是不确定的?

    我从未真正研究过它 但现在我意识到我无法轻松构建两个相同的 jar 文件 我的意思是 如果我构建两次 而不更改任何内容 我会得到完全相同的大小 但校验和不同 jar 所以我很快进行了一些测试 基本上解压 排序 n k 5然后diff ing
  • mutate_impl(.data,dots)评估错误:找不到对象

    我有一些工作代码 我必须更新 R 并再次安装所有软件包 当我尝试再次运行代码时遇到了困难 这是一个玩具示例 工作代码 get cyl column mtcars gt dplyr select cyl add 1 to all numeri
  • 将 div 居中对齐

    我想漂浮一个div到中心 是否可以 text align center不能在 IE 中工作 本身没有浮动到中心 如果要将块元素置于另一个块元素的中心 请执行以下操作 div div Stuff to center div div with
  • Typescript:如何在 React 中添加历史对象的类型检查?

    我有以下代码 它接收历史对象作为道具 const ChildComponent history gt div div div div
  • PHP echo SQL 计数[重复]

    这个问题在这里已经有答案了 好的 所以我遇到了问题 我似乎无法在 PHP 中成功回显 SQL 计数 SQL SELECT TableA C COUNT FROM TableA JOIN TableB ON TableA C TableB D
  • 32位机器如何处理大于2^32的数字?

    I am trying to understand how calculations involving numbers greater than 232 happen on a 32 bit machine C code cat size
  • 部分类调试

    我已经为我的 xsd 自动生成的类创建了一个部分类 问题在于调试这个部分类 无法识别断点或者编译器不会在分部类中设置的断点处中断 Autogenerated class by xsd exe public partial class Cla
  • 如何使用 Rust 合并两个 JSON 对象?

    我有两个 JSON 文件 JSON 1 title This is a title person firstName John lastName Doe cities london paris JSON 2 title This is an