2016-06-22 5 views
2

를 사용하여 JSON의 요소의 배열 내에서 업데이트 우리는 내가 DocumentPatchBuilder의 insertFragment을 시도 Marklogic - 자바 API를

{ 
    "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" 
       } 
      ] 
     } 
    ] 
} 

처럼 JSON 보이는이 있다고 할 수 있습니다. 이 사용하여 전/json 속성을 업데이트 할 수 있습니다. 하지만 배열 형식의 속성 workInformation 안에 삽입해야합니다.

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

나는 workInformation 섹션을 사용하여 자바 API를 내부에 아래에 언급 된 데이터를 삽입하고 싶었다 - -

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

나 그것을 수행하는 방법을 알려 주시기 바랍니다 여기에 내가 시도 insertFragment의 예입니다.

읽어 주셔서 감사합니다.

+0

서버 측 JavaScript에서이 작업을 수행 할 수 있습니까? 그렇다면 그것은 단순한'var x = fn.doc (...); x [ 'workInformation']. push ({ '주소': ...}); xdmp.save (...)'. SJS는 JSON과 매우 잘 작동합니다. – scotthenninger

+0

자바 API에서하고 싶습니다. 예제/문서를 참조 할 수 있다면 도움이 될 것입니다. – RCS

답변

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); 

이것은 "workInformation"속성의 말에

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

를 삽입합니다 : 코드는 무언가 같이 될 것입니다.

+0

고맙습니다. – RCS

+0

Vivek 배열의 배열에 조각을 삽입해야합니다. 나는 json을 업데이트했다. 이제 workInformation 배열 안에 참조 배열이 들어있다. pb.insertFragment ("$. [\"workInformaiton \ "] [1]. [\"reference \ "]", Position.LAST_CHILD, fragment) 시도했습니다. 그것은 작동하지 않습니다. 배열 타입의 배열로 동작시키는 법을 알려주시겠습니까? – RCS

+0

나는 이것을 시도해 보았다. [\ "workInformaiton \"] [0] [\ "reference \"] – RCS