由於項目要求,我必須使用com.fasterxml.jackson.databind
庫來解析JSON數據不能使用其他可用的JSON庫。的Java:在JSON文件嵌套數組節點的更新值
我是新來的JSON解析,所以不知道是否有更好的選擇嗎?
我想知道我可以在JSON文件中Array
節點更新一個字符串值。
以下是JSON示例。請注意,這不是整個文件內容,而是一個簡化版本。
{
"call": "SimpleAnswer",
"environment": "prod",
"question": {
"assertions": [
{
"assertionType": "regex",
"expectedString": "(.*)world cup(.*)"
}
],
"questionVariations": [
{
"questionList": [
"when is the next world cup"
]
}
]
}
}
以下是將JSON讀入java對象的代碼。
byte[] jsonData = Files.readAllBytes(Paths.get(PATH_TO_JSON));
JsonNode jsonNodeFromFile = mapper.readValue(jsonData, JsonNode.class);
要更新根級節點值例如environment
在JSON文件,我發現以下方法在一些SO線程上。
ObjectNode objectNode = (ObjectNode)jsonNodeFromFile;
objectNode.remove("environment");
objectNode.put("environment", "test");
jsonNodeFromFile = (JsonNode)objectNode;
FileWriter file = new FileWriter(PATH_TO_JSON);
file.write(jsonNodeFromFile.toString());
file.flush();
file.close();
問題1:這是更新JSON文件中值的唯一方法,它是最好的方式嗎?我擔心在這裏進行雙重鑄造和文件I/O。
問題2:我無法找到一種方式來更新用於嵌套陣列節點例如值questionList
。從更新的when is the next world cup
問題when is the next soccer world cup
工作就像一個魅力。無需再處理JSON層次結構。我可以輕鬆地解析Java對象和文件中的數據,更新屬性並將其寫回到文件中。 (1)將數據讀取到java對象:TestClass testClass = mapper.readValue(new File(FILE_FULL_PATH),TestClass.class); #2)更新Java對象爲Pranay建議#3將對象寫回到文件中:mapper.writeValue(new File(FILE_FULL_PATH),testClass); –