2016-12-28 4 views
3

JsonPathとそれに相当するXML Xpathがわかっている(未知の構造の)JSONを修正しようとしています。Javaで未知のJSONのJsonNodeを動的に変更します。

私は同じためにcom.jayway.jsonpath.JsonPathライブラリを使用して疲れました。 JsonPathの問題は、私に値を返しますが、ターゲットノードを変更できないことです。

従うが同じ

JsonPath.read(jsonFile, jsonPath); 
JsonPath.parse(jsonPath); 
System.out.println("Author: "+JsonPath.read(jsonFile, jsonPath)); 

のための私のコードスニペットであるpreviously asked quetionで述べたように、私はジャクソンを使用してみました、しかし、

私が行うことはできません
((ObjectNode) parent).put(fieldName, newValue); 

を次のようにノードがノードを横断する必要があります未知の構造のために。

は、私は質問recursively parse JSON objectに与えられた答えを試してみましたが、それは変更しないでどのように解析するかと言う

私はこれを達成することができる方法はあり

JsonNode root = mapper.readTree("Json in form of String"); 
((JsonNode)(root.get("JsonPath")).set("New Value"); 

次の行う必要があり

答えて

3

JsonNodeオブジェクトは変更不可能なので変更できません。あなたができることはJsonNodeを別のものに置き換えることです。必要な方法を公開するには、ObjectNodeへのキャストも必要です。

JsonNode node = root.findParent("JsonPath"); 

次に、新しいものと交換するには、これらの2つの方法のいずれかを使用します:

((ObjectNode) node).remove("JsonPath");   // remove current node 
((ObjectNode) node).put("JsonPath", "New Value"); // add new one with new value 

または

((ObjectNode) node).replace("JsonPath", new TextNode("New Value")); 
交換したいノードの親をまず見つけます
関連する問題