Suchen Json-Pfad/(eine API) zur Aktualisierung der Wert in der gegebenen json-string in Java

Inshort : ich versuche zu finden, einige api, die könnte sich nur ändern Sie den Wert, indem Sie den ersten parameter als jsonString , der zweite parameter als JSONPath und drittens wird der neue Wert des Parameters. Aber alles was ich fand ist das..
https://code.google.com/p/json-path/

Diese api ermöglicht es mir, diese zu finden Wert in JSON-String. Aber, ich bin nicht der Suche nach einfachen Weg, um den Wert zu aktualisieren der Schlüssel. Zum Beispiel, Hier ist ein Buch.json.

{
"store":{
    "book":[
        {
            "category":"reference",
            "author":"Nigel Rees",
            "title":"Sayings of the Century",
            "price":8.95
        },
        {
            "category":"fiction",
            "author":"Evelyn Waugh",
            "title":"Sword of Honour",
            "price":12.99,
            "isbn":"0-553-21311-3"
        }
    ],
    "bicycle":{
        "color":"red",
        "price":19.95
    }
   }
 }

Ich kann auf die Farbe des Fahrrades dies zu tun.

String bicycleColor = JsonPath.read(json, "$.store.bicycle.color");

Aber ich bin auf der Suche nach einer Methode, die in JsonPath oder andere api-einige Sache wie diese

    JsonPath.changeNodeValue(json, "$.store.bicycle.color", "green");
    String bicycleColor = JsonPath.read(json, "$.store.bicycle.color");
    System.out.println(bicycleColor);  //This should print "green" now. 

Bin ich ohne diese Optionen,

  • Erstellen Sie eine neue JSON-String.
  • Erstellen Sie ein JSON-Objekt, um sich mit sich ändernden Wert und konvertieren es zurück zu jsonstring

Grund: ich habe etwa 500 verschiedene Anforderungen für verschiedene Arten von service, die Rückkehr verschiedene json-Struktur. Also, ich möchte nicht manuell erstellen möchten neue JSON-string immer. Weil, die IDs sind dynamisch im json-Struktur.

Jede Idee oder Richtung, wird sehr geschätzt.

Aktualisierung dieser Frage mit der folgenden Antwort.

  1. Kopieren MutableJson.java.
  2. Kopie dieser kleine Schnipsel und ändern, wie pro die Sie brauchen.
    private static void updateJsonValue() {
    
    JSONParser parser = new JSONParser();
    JSONObject jsonObject = new JSONObject();
    
    FileReader reader = null;
    try {
        File jsonFile = new File("path to book.json");
        reader = new FileReader(jsonFile);
        jsonObject = (JSONObject) parser.parse(reader);
    
    } catch (Exception ex) {
        System.out.println(ex.getLocalizedMessage());
    }
    
    Map<String, Object> userData = null;
    try {
        userData = new ObjectMapper().readValue(jsonObject.toJSONString(), Map.class);
    } catch (IOException e) {
        //TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    MutableJson json = new MutableJson(userData);
    
    System.out.println("Before:\t" + json.map());
    
    json.update("$.store.book[0].author", "jigish");
    json.update("$.store.book[1].category", "action");
    
    System.out.println("After:\t" + json.map().toString());
    
    }

Verwenden diese Bibliotheken.

  • import org.json.einfach.JSONObject;
  • import org.json.einfach.parser.JSONParser;
  • import org.codehaus.jackson.Karte.ObjectMapper;
Ich denke, es ist ein guter start mit [JSONiq][1], die anscheinend den gleichen update-Funktionen, wie in [Xquery update][2]. So etwas wie update value of ... with .... [Zorba'] [3] sieht aus wie eine gute Umsetzung der JSONiq und es gibt ein [Java binding][4]. Ich habe noch nicht ausprobiert, es ist nur eine Idee, wenn es funktioniert poste ich die Antwort. [1]: jsoniq.org/docs/JSONiq-usecases/html-single/... [2]: w3.org/TR/xquery-update-10/#id-replacing-node-value [3]: zorba.io/home [4]: docs.zorba.io.s3-website-us-east-1.amazonaws.com/3.0.0/java
Um es klarzustellen: das, was Sie scheinen WIRKLICH wollen, zu tun ist ein json-template mit den meisten die gleichen Werte. In anderen Worten, Sie erhalten ein JSON-string, machen sich eine Veränderung an, und leitet es woanders. Richtig?
Dies ist, was ich versuche zu erreichen. Lesen json-string --> Lesen Sie eine beliebige Taste(z.B. Fahrrad-Farbe) --> aktualisieren, dass die Knoten(also Farbe ändern, Wert) --> modifizierte json-string Anfragen zu stellen. Hinweis: ich kann nicht json als Vorlage habe ich verschiedene json-Struktur für alle server-Anfragen. Ich habe zum generieren von json-string aus der java-Klasse, um eine Anfrage zu stellen. Ich kann immer manuell erstellen dieser json-string, aber es ist mehr Strecke für 500 verschiedene json-string Strukturen. Ich Schreibe automation framework testng,spring,java ohne Benutzeroberfläche zu automatisieren Sachen, wo ich arbeiten im json-Ebene.
So ist Ihre Struktur: Client - - - - json-request---> intermediate server (die Sie jetzt arbeiten) -----> final server?
Ja. das ist absolut richtig.

InformationsquelleAutor JLP | 2014-08-20

Schreibe einen Kommentar