2016-10-31 4 views
1

ich einen JSON-String habe, hier ist beispielsweiseimmer genauer Teil json

{ 
    "Param1":"Value1", 
    "Param2":{...} 
    "ParamThatINeed":{...} 
} 

ich nur „ParamThatINeed“ Objekt mit Gson lib in Java bekommen will, was ist die beste Art und Weise zu bekommen, was ich brauche - schreibe root-Klasse, schreibe dann Klasse für "ParamThatINeed" und dekontiere dann json und benutze nur "ParamThatINeed" -Objekt?

Oder ist es vielleicht besser, meine jsonString im Voraus in eine andere Zeichenfolge zu konvertieren, die nur "ParamThatINeed" jsonString-Objekt mit zum Beispiel regexp sein wird? Oder vielleicht gibt es einen besseren Weg?

Antwort

1

Ihre vorgeschlagene Lösung ist schmerzlos und erweiterbar (d. H., Wenn Sie sich entscheiden, in Zukunft ein zusätzliches Feld zu lesen, fügen Sie einfach ein anderes Feld zu Ihrem Objekt hinzu). Im Allgemeinen ist das genau, wie Sie Gson verwenden möchten - konstruieren Sie die erforderlichen Java-Klassen, um die Daten darzustellen, die Sie interessieren und Gson wird die Felder stillschweigend verwerfen, die Sie nicht interessieren. Für Ihr Beispiel könnte das aussehen:

private static final Gson GSON = ...; 

public static class MyJsonData { 
    private final ParamThatINeed paramThatINeed; 

    public ParamThatINeed getParamThatINeed() { ... } 
} 

public static class ParamThatINeed { 
    ... 
} 

public static ParamThatINeed extractParamThatINeed(String json) { 
    return GSON.fromJson(json, MyJsonData.class).getParamThatINeed(); 
} 

Sie könnte analysieren das Feld selbst als @GuiSim vermuten lässt, aber das wird sich so leicht nicht skaliert, wenn sich Ihre Anforderungen ändern, und in der Regel die Idee hinter sprechen Gson soll vermeiden, direkt mit JsonElement und verwandten Klassen zu arbeiten.

Ich würde definitiv einen Vorverarbeitungsschritt entmutigen, der den JSON-String in ein anderes Format konvertiert. Strukturierte Daten und String-Manipulationen vermischen sich nicht, da sie zu sprödem Code führen. JSON-Parsing-Bibliotheken wie Gson existieren genau, um solche String-Manipulationen zu vermeiden.

2
JsonObject jobj = new Gson().fromJson(YOUR_JSON_HERE, JsonObject.class); 
JsonElement value = jobj.get("ParamThatINeed"); 

value enthält das Element mit dem Schlüssel ParamThatINeed verbunden.

Verwandte Themen