json - Marklogic - 使用 java api 更新 json 元素数组

标签 json jackson marklogic marklogic-8

假设我们有 json 看起来像

{ 
   "name":"abc", 
   "lastName":"xyz", 
   "description":"aaaaa aaaa", 
   "dob":11-10-1988,
   "workInformation":[
       {
          "address":"kolkata", 
          "workFor":"vvv Pvt Ltd",
          "reference" : [
              {
                 "refName" : "ttt",
                 "refId" : "12345"
              },
               {
                 "refName" : "sss",
                 "refId" : "23412"
              }
          ]
       },
        {
          "address":"bangalore", 
          "workFor":"www Pvt Ltd",
          "reference" : [
              {
                 "refName" : "rrr",
                 "refId" : "43434"
              },
               {
                 "refName" : "yyyy",
                 "refId" : "34213"
              }
          ]
       },
       {
          "address":"delhi", 
          "workFor":"sss Pvt Ltd",
          "reference" : [
              {
                 "refName" : "qqqq",
                 "refId" : "76767"
              },
               {
                 "refName" : "gggg",
                 "refId" : "65432"
              }
          ]
       }
    ]
}

我尝试过DocumentPatchBuilder的insertFragment。使用这个我可以更新 json 属性之前/之后。但我必须插入数组类型的属性 workInformation 。这是我尝试过的 insertFragment 示例 -

 DocumentPatchBuilder pb = docMgr.newPatchBuilder();
 pb.pathLanguage(DocumentPatchBuilder.PathLanguage.JSONPATH);
 ObjectMapper mapper = new ObjectMapper();
 pb.insertFragment("workInformation", Position.BEFORE,mapper.createObjectNode().put("hello", "hai"));

我想使用 java api 在 workInformation 部分中插入下面提到的数据 -

   {
          "address":"Mumbai", 
          "workFor":"zzz Pvt Ltd"
   }

请告诉我该怎么做。

感谢您的阅读。

最佳答案

要插入到 workInformation 数组中,您需要将位置指定为 POSITION.LAST_CHILD,以将其插入为上下文子列表的最后一个子项。此外,您需要在 patchBuilder.insertFragment - [“workInformation”] 的第一个参数中将“workInformation”指定为数组类型。代码类似于:

DocumentPatchBuilder pb = docMgr.newPatchBuilder();
pb.pathLanguage(DocumentPatchBuilder.PathLanguage.JSONPATH);
ObjectMapper mapper = new ObjectMapper();

ObjectNode fragmentNode = mapper.createObjectNode();
fragmentNode = mapper.createObjectNode();
fragmentNode.put("address", "mumbai");
fragmentNode.put("workFor", "zzz Pvt Ltd");
String fragment = mapper.writeValueAsString(fragmentNode);

pb.insertFragment("$.[\"workInformation\"]", Position.LAST_CHILD, fragment);

这应该可以解决问题,并且会插入

{
    "address":"Mumbai", 
    "workFor":"zzz Pvt Ltd"
}

位于“workInformation”属性的末尾。

关于json - Marklogic - 使用 java api 更新 json 元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967587/

相关文章:

xml - 如何使用 XQuery 在 xml 文档中查找重复数据?

javascript - Underscore.js,将当前日期设置为包含过去日期的键

java - jackson 如何在没有二传手的情况下设置私有(private)属性(property)?

java - 如何全局配置jackson with spring?

java - GlassFish JAX-RS Jackson 自定义 JSON 序列化

MarkLogic 8 服务器端 javascript : convert existing xml to json

sql - 如何查询多行并解析为json?

javascript - 从服务器接收对象并将其转换为客户端 Typescript (javascript) 中所需的对象

javascript - 在 json 字符串化数组对象时排除对象属性

xml - 如何从 XML 中获取所有属性名称,而不是特定节点的值?