json File is :
{
"id": 1,
"name": "TC1",
"steps": [
{
"stepId": 1,
"action": "open",
"object": "chrome",
"input": "https://www.google.com/",
}
]
}
and java code is :
public static void updateTestCaseValue(String tabTCPath) {
ObjectMapper objectMapper = new ObjectMapper();
File jsonFile = new File(tabTCPath);
try {
JsonNode arrNode = objectMapper.readTree(jsonFile).get("steps");
if (arrNode.isArray()) {
for (final JsonNode objNode : arrNode) {
if(objNode.findPath("stepId").asText().equals("1")) {
((ObjectNode) objNode).put("object", "Firefox");
}
objectMapper.writerWithDefaultPrettyPrinter().writeValue(new File(tabTCPath), arrNode);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
And output is:
[ {
"stepId" : 1,
"action" : "openBrowser1",
"object" : "Firefox",
"input" : "https://www.google.com/",
"output" : "",
"description" : "Open browser"
}]
but below part is not written to file
"id": 1,
"name": "TC1",
解决方案
You lost reference to root JsonNode. You need to keep reference to root node. Also, write the result after for-each loop:
ObjectMapper objectMapper = new ObjectMapper();
JsonNode root = objectMapper.readTree(json);
JsonNode steps = root.get("steps");
if (steps.isArray()) {
for (final JsonNode item : steps) {
if (item.findPath("stepId").asText().equals("1")) {
((ObjectNode) item).put("object", "Firefox");
}
}
String resultJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(root);
System.out.println(resultJson);
}