5

I am trying to modify a JSON (of an unknown structure) where the JsonPath and its equivalent XML Xpath is known to me.

I have tired using com.jayway.jsonpath.JsonPath library for the same. The problem with JsonPath is, it returns me the value but I am not able to modify the Target Node.

Follows is my code snippet for the same

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

I tried using Jackson as mentioned in previously asked quetion, But it needs to be traversed node by node as follows

((ObjectNode) parent).put(fieldName, newValue);

which I cannot do due to unknown structure.

I have tried the answer given to the question recursively parse JSON object but it says how to parse not modify

I need to do the follows

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

Is there any way in which this can be achieved?

1 Answer 1

5

JsonNode objects are immutable so you can't modify them. What you can do is replace a JsonNode with another one. A cast to ObjectNode is also required to expose the required methods. First find the parent of the node you want to replace :

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

Then use either of these 2 methods to replace it with a new one:

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

or

((ObjectNode) node).replace("JsonPath", new TextNode("New Value"));
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.