如何在杰克逊2中深度合并JSON?

克里斯里

我正在使用Jersey和Jackson2开发Restful API。开发PUT方法时会遇到问题。我们的PUT方法有点像PATCH方法。它将仅更新在请求正文中接收的属性。

我正在使用ObjectMapper.readerForUpdating()方法进行对象合并。但是此方法仅支持第一级合并。例如:我有一个存在的JSON对象

{
  "a": "this is a",
  "b": "this is b",
  "c": {
    "x": 1,
    "y": 2
  }
}

然后我收到一个JSON对象,就像

{
  "a": "this is a new a",
  "c": {
    "x": 3
  }
}

我希望合并的对象应该像这样:

{
  "a": "this is a new a",
  "b": "this is b",
  "c": {
    "x": 3,
    "y": 2
  }
}

但是结果是

{
  "a": "this is a new a",
  "b": "this is b",
  "c": {
    "x": 3,
    "y": null
  }
}

一级属性已正确合并。但从更深层次上讲,它正在执行对象替换。有什么办法可以进行深度合并?

萨克斯曼

此时,您必须自己手动遍历JSON树(JsonNode),更新属性,以手动完成此操作可能会有在Jackson上构建的扩展库来提供对此的支持,但是核心Jackson数据绑定仅具有单个(根JSON对象)级别的“浅”合并。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在杰克逊2.8.1中访问TypeResolutionContext

来自分类Dev

如何在发送之前包装运动衫+杰克逊json响应

来自分类Dev

如何在杰克逊中反序列化抽象类

来自分类Dev

如何在杰克逊中反序列化抽象类

来自分类Dev

杰克逊2. *和json到ArrayList <>

来自分类Dev

如何使用杰克逊从JSON提取部分“原始”文本?

来自分类Dev

杰克逊如何实现JSON传输到对象

来自分类Dev

如何找到字段(杰克逊)的JSON密钥?

来自分类Dev

杰克逊如何实现JSON传输到对象

来自分类Dev

我如何使用杰克逊解开JSON中的特定字段?

来自分类Dev

杰克逊2中的java.beans.ConstructorProperties

来自分类Dev

杰克逊JSON模式日期

来自分类Dev

杰克逊JSON ObjectMapper.readvalue

来自分类Dev

用杰克逊解析巨大的JSON

来自分类Dev

泽西·杰克逊解组JSON

来自分类Dev

用杰克逊转换的protobuf以JSON?

来自分类Dev

杰克逊JSON映射器

来自分类Dev

杰克逊JSON类结构

来自分类Dev

杰克逊验证输入JSON对象

来自分类Dev

春季如何捕捉杰克逊异常?

来自分类Dev

杰克逊如何处理接口?

来自分类Dev

杰克逊如何创建JsonObject

来自分类Dev

杰克逊中的ObjectMapper错误

来自分类Dev

如何在自定义序列化程序中访问默认的杰克逊序列化

来自分类Dev

FasterXML杰克逊?

来自分类Dev

杰克逊-杰克逊未为嵌套对象创建json

来自分类Dev

Java; JSON; 杰克逊; 从JSON数组中的列表中检索值

来自分类Dev

杰克逊:如何将平面 json 转换为嵌套 json

来自分类Dev

如何在MongoDb中使用杰克逊将日期字段存储为ISODate()