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

RCS*_*RCS 2 json marklogic jackson 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"
              }
          ]
       }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我尝试过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"));
Run Code Online (Sandbox Code Playgroud)

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

   {
          "address":"Mumbai", 
          "workFor":"zzz Pvt Ltd"
   }
Run Code Online (Sandbox Code Playgroud)

请让我知道怎么做.

谢谢阅读.

小智 5

要在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);
Run Code Online (Sandbox Code Playgroud)

这应该是技巧,这将插入

{
    "address":"Mumbai", 
    "workFor":"zzz Pvt Ltd"
}
Run Code Online (Sandbox Code Playgroud)

在"workInformation"属性的末尾.