由于项目要求,我必须使用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); –