2017-05-27 2 views
0

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

Antwort

5

können Sie ObjectMapper verwenden, um zu analysieren, dass JSON, ist es sehr einfach ist, zu analysieren und zu aktualisieren JSON mit pojo Klasse.

Verwenden Sie link, um Ihre JSON in Java-Klasse zu konvertieren, fügen Sie einfach Ihre JSON hier Download Klasse Struktur.

Sie können auf verschachtelte Json-Felder zugreifen oder sie aktualisieren, indem Sie. (Punkt) Operator

ObjectMapper mapper = new ObjectMapper(); 
    String jsonString="{\"call\":\"SimpleAnswer\",\"environment\":\"prod\",\"question\":{\"assertions\":[{\"assertionType\":\"regex\",\"expectedString\":\"(.*)world cup(.*)\"}],\"questionVariations\":[{\"questionList\":[\"when is the next world cup\"]}]}}"; 
    TestClass sc=mapper.readValue(jsonString,TestClass.class); 

    // to update environment 
    sc.setEnvironment("new Environment"); 
    System.out.println(sc); 

    //to update assertionType 
    Question que=sc.getQuestion(); 
    List assertions=que.getAssertions(); 
    for (int i = 0; i < assertions.size(); i++) { 
     Assertion ass= (Assertion) assertions.get(i); 
     ass.setAssertionType("New Type"); 
    } 
+1

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); –

Verwandte Themen