Aufgrund der Projektanforderung muss ich com.fasterxml.jackson.databind
Bibliothek verwenden, um JSON-Daten zu analysieren. Andere JSON-Bibliotheken können nicht verwendet werden.Java: Aktualisiere den Wert des verschachtelten Array-Knotens in der JSON-Datei.
Ich bin neu in JSON Parsing, also nicht sicher, ob es hier bessere Optionen gibt?
Ich würde gerne wissen, wie kann ich einen String-Wert in einem Array
Knoten in der JSON-Datei aktualisieren.
Folgendes ist ein Beispiel JSON. Bitte beachten Sie, dass dies nicht der gesamte Dateiinhalt ist, sondern eine vereinfachte Version.
{
"call": "SimpleAnswer",
"environment": "prod",
"question": {
"assertions": [
{
"assertionType": "regex",
"expectedString": "(.*)world cup(.*)"
}
],
"questionVariations": [
{
"questionList": [
"when is the next world cup"
]
}
]
}
}
Im Folgenden finden Sie den Code ein JSON in Java-Objekt zu lesen.
byte[] jsonData = Files.readAllBytes(Paths.get(PATH_TO_JSON));
JsonNode jsonNodeFromFile = mapper.readValue(jsonData, JsonNode.class);
Um einen Root-Level-Knotenwert zu aktualisieren, z. environment
in der JSON-Datei, fand ich folgenden Ansatz auf einige SO-Threads.
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();
Frage 1: Ist dies der einzige Weg, um einen Wert in JSON-Datei zu aktualisieren und es ist die beste Art und Weise möglich? Ich bin besorgt über Double Casting und Datei-I/O hier.
Frage 2: Ich konnte keinen Weg finden, den Wert für einen geschachtelten Array-Knoten zu aktualisieren, z. questionList
. Aktualisieren Sie die Frage when is the next world cup
-when is the next soccer world cup
Arbeitete wie ein Charme. Sie müssen sich nicht mehr mit der JSON-Hierarchie befassen. Ich könnte die Daten leicht zu und von Java-Objekt und der Datei analysieren, Eigenschaften aktualisieren und es zurück in die Datei schreiben. # 1) Daten in Java-Objekt lesen: TestClass testClass = mapper.readValue (neue Datei (FILE_FULL_PATH), TestClass.class); # 2) Java-Objekt aktualisieren, da Pranay # 3 vorgeschlagen hat, das Objekt zurück in die Datei zu schreiben: mapper.writeValue (neue Datei (FILE_FULL_PATH), testClass); –