プロジェクト要件のため、JSONデータを解析するためにcom.fasterxml.jackson.databind
ライブラリを使用する必要があります。他の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);
ルートレベルのノード値を更新する。のJSONファイルの中でenvironment
、いくつかの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); –