Ich möchte Daten von JSON analysieren, die vom Typ sind String
. Ich benutze Google Gson .
Ich habe:
jsonLine = "
{
"data": {
"translations": [
{
"translatedText": "Hello world"
}
]
}
}
";
und meine Klasse ist:
public class JsonParsing{
public void parse(String jsonLine) {
// there I would like to get String "Hello world"
}
}
Antworten:
Dies ist ein einfacher Code, ich habe alle Überprüfungen vermieden, aber das ist die Hauptidee.
Um die Verwendung allgemeiner zu gestalten, werden Sie feststellen, dass Gsons Javadocs ziemlich klar und hilfreich sind.
quelle
In meiner ersten gson-Anwendung habe ich die Verwendung zusätzlicher Klassen zum Abfangen von Werten vermieden, hauptsächlich weil ich json für Konfigurationsangelegenheiten verwende
Trotz des Mangels an Informationen (sogar der Gson-Seite) habe ich Folgendes gefunden und verwendet:
ab
Jedes Mal, wenn gson ein {} sieht, wird eine Map erstellt (tatsächlich eine gson StringMap).
Jedes Mal, wenn gson ein '' sieht, wird ein String erstellt
Jedes Mal, wenn gson eine Zahl sieht, wird ein Double erstellt
Jedes Mal, wenn gson ein [] sieht, wird eine ArrayList erstellt
Sie können diese Fakten (kombiniert) zu Ihrem Vorteil nutzen
Schließlich ist dies der Code, der das Ding macht
quelle
Am einfachsten ist es normalerweise, eine passende Objekthierarchie zu erstellen, wie folgt:
und dann mit GSON binden, Objekthierarchie über Felder durchlaufen. Das Hinzufügen von Gettern und Setzern ist für grundlegende Datencontainer sinnlos.
Also so etwas wie:
quelle
Sie können entsprechende Java-Klassen für die JSON-Objekte erstellen. Die ganzzahligen Zeichenfolgenwerte können unverändert zugeordnet werden. Json kann so analysiert werden:
Hier ist ein Beispiel: http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html
quelle
Sie können eine separate Klasse verwenden, um das JSON-Objekt darzustellen, und mithilfe von
@SerializedName
Anmerkungen den Feldnamen angeben, der für jedes Datenelement erfasst werden soll:Anschließend können Sie die Analyse in Ihrer parse () -Methode mithilfe eines
Gson
Objekts durchführen:Mit diesem Ansatz können Sie die
Response
Klasse wiederverwenden , um weitere zusätzliche Felder hinzuzufügen, um andere Datenelemente aufzunehmen, die Sie möglicherweise aus JSON extrahieren möchten. oder um eine zusätzliche Zeichenfolge für die erkannte Quellsprache zu erhalten.quelle
Eine Möglichkeit wäre, ein JsonObject zu erstellen und die Parameter zu durchlaufen. Beispielsweise
Dann können Sie Bean-Werte wie folgt extrahieren:
Hoffe das hilft.
quelle
Mit Gson zum Lösen
würde ich eine Klasse für einzelne Parameter im json-String erstellen. Alternativ können Sie eine Hauptklasse mit dem Namen "Daten" erstellen und dann auf ähnliche Weise innere Klassen erstellen. Ich habe aus Gründen der Übersichtlichkeit separate Klassen erstellt.
Die Klassen sind wie folgt.
In der Klasse JsonParsing rufen wir die Methode "parse"
gson.fromJson(jsonLine, Data.class)
auf, die den String in Java-Objekten mit Reflection konvertiert.Sobald wir Zugriff auf das Objekt "Daten" haben, können wir auf jeden Parameter einzeln zugreifen.
Ich hatte keine Gelegenheit, diesen Code zu testen, da ich nicht auf meiner Entwicklungsmaschine bin. Das sollte aber helfen.
Einige gute Beispiele und Artikel.
http://albertattard.blogspot.com/2009/06/practical-example-of-gson.html
http://sites.google.com/site/gson/gson-user-guide
Code
quelle
private String translatedText
ohne die Zugriffskontrolle zu verletzen, daher gibt es keine MöglichkeitfromJSON
, es in JVMs einzustellen, die sich nicht für Reflexions-Trampling über die gesamte Zugriffskontrolle entschieden haben.Ein einfaches Beispiel, um einen JSON wie diesen zu analysieren
quelle
Generieren Sie zunächst Getter And Setter mithilfe der folgenden Parsing-Site
http://www.jsonschema2pojo.org/
Verwenden Sie jetzt Gson
Verwenden Sie nun object, um Werte wie data, translationText abzurufen
quelle
Sie können eine JsonPath-Abfrage verwenden, um den Wert zu extrahieren. Und mit JsonSurfer, das von Gson unterstützt wird, kann Ihr Problem durch einfach zwei Codezeilen gelöst werden!
quelle
Ein Zeilencode:
quelle