2016-06-22 5 views
2

を使用してJSONの要素のアレイ内の更新は、我々は、私がDocumentPatchBuilderのinsertFragmentを試してみました Marklogic - Java 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の内部に挿入する必要があります。ここで私が試した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" 
    } 

私はそれを行う方法を教えてください。

読んでいただきありがとうございます。

+0

サーバー側のJavaScriptでこれを行うことは可能ですか?それは単純な 'var x = fn.doc(...)です。 x ['workInformation']。push({'アドレス':...}); xdmp.save(...) '。 SJSはJSONと非常にうまく動作します。 – scotthenninger

+0

Java APIでやりたいです。サンプル/ドキュメントを参照できる場合は参考になります。 – RCS

答えて

5

workInformation配列の内部に挿入するには、その位置をPOSITION.LAST_CHILDとして指定して、コンテキストの子リストの最後の子として挿入する必要があります。また、patchBuilder.insertFragment - ["workInformation"]の最初の引数に配列型として "workInformation"を指定する必要があります。これはトリックを行う必要があり、これは「workInformation」プロパティの最後に

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

を挿入する

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

:コードは次のようなものになるだろう。

+0

ありがとう、それは働いた。 – RCS

+0

Vivek配列の配列にフラグメントを挿入する必要があります。私は自分のjsonを更新しました。今はworkInformation配列の内部に参照配列があります。私はpb.insertFragment( "$。[\" workInformaiton \ "] [1]。[\" reference \ "]"、Position.LAST_CHILD、fragment)を試しました。それは動作していません。配列型の配列で動作させる方法を教えてください。 – RCS

+0

これを試してみましたが、それはうまくいきました - [\ "workInformaiton \"] [0] [\ "reference \"] – RCS

関連する問題