【问题标题】:How to add an ObjectNode into another ObjectNode as a child using Jackson?如何使用 Jackson 将 ObjectNode 添加到另一个 ObjectNode 作为孩子?
【发布时间】:2017-06-02 10:40:19
【问题描述】:

我有下面的 ObjectNode。

handlerObjectNode -> {"Info":{"Brand":{"BrandName":"TOP OF THE WORLD"}}}

我有另一个ObjectNode,格式如下。

fieldObjects -> {"Description":"REGULAR BR"}

如何从以上两个中创建下面的 ObjectNode?​​p>

{
   "Info": {
       "Brand": {
           "BrandName": "TOP OF THE WORLD"
       }
   "Description": "REGULAR BR"
   }
 }

我尝试了以下代码。

handlerObjectNode.setAll(fieldObjects);

但它会导致以下 ObjectNode。

{
   "Info": {
       "Brand": {
           "BrandName": "TOP OF THE WORLD"
       }
   },
   "Description": "REGULAR BR"
 }

我正在使用 Jackson 的 com.fasterxml.jackson.databind.node.ObjectNode。任何帮助将不胜感激。

【问题讨论】:

  • 试试 .. root.with("Info").put("Description", "REGULAR BR");更多info
  • @Onkar 成功了!谢了哥们。请把这个作为答案:)

标签: java json data-binding jackson fasterxml


【解决方案1】:

试试这个,

  root.with("Info").put("Description", "REGULAR BR");

更多信息,请点击here

【讨论】:

  • 链接现在不可用。请刷新它!
  • 如果fieldObjects是复杂的嵌套json而不是单键值对怎么办?
【解决方案2】:
ObjectMapper mapper = new ObjectMapper();

//create root node
ObjectNode rootNode =  mapper.createObjectNode();

root.put("key1", "value1");
jsonObject.put("key2", "value2");

jsonObject.putArray("array2").add("item1").add("item2").add(12); //tuple
// create child node
ObjectNode childNode = mapper.createObjectNode();
        childNode.put("name", "Hungbeo");
        childNode.put("age", 12);

// add childNode to rootNode
rootNode.set("user", childNode);

System.out.println(rootNode.toString());

输出:

{"key1":"value1","key2":"value2","array":["item1","item2",12],"user":{"name":"Hungbeo","age":12}}

【讨论】:

    【解决方案3】:

    提取Info 对象并将fieldObjects 添加到其中:

    ObjectMapper om = new ObjectMapper();
    
    ObjectNode handlerObjectNode = (ObjectNode) om.readTree("{\"Info\":{\"Brand\":{\"BrandName\":\"TOP OF THE WORLD\"}}}");
    ObjectNode fieldObjects = (ObjectNode) om.readTree("{\"Description\":\"REGULAR BR\"}");
    
    ObjectNode info = (ObjectNode) handlerObjectNode.path("Info");
    info.setAll(fieldObjects);
    

    结果如下:

    {
      "Info" : {
        "Brand" : {
          "BrandName" : "TOP OF THE WORLD"
        },
        "Description" : "REGULAR BR"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2015-03-03
      相关资源
      最近更新 更多