【发布时间】:2017-05-27 04:07:27
【问题描述】:
由于项目需要,我必须使用com.fasterxml.jackson.databind库来解析JSON数据,不能使用其他可用的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
【问题讨论】:
标签: java arrays json jackson jackson-databind