Ich habe den folgenden JSON-Text. Wie kann ich es analysieren, um die Werte von zu erhalten?pageName
, pagePic
, post_id
etc.?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
Antworten:
Die org.json- Bibliothek ist einfach zu bedienen. Beispielcode unten:
Weitere Beispiele finden Sie unter: JSON in Java analysieren
Herunterladbare JAR: http://mvnrepository.com/artifact/org.json/json
quelle
org.json
andere Bibliotheken für einfaches JSON-Parsing auswählen, ohne auch nur hinzuschauen . Es ist die Referenzbibliothek, die Douglas Crockford (der JSON-Entdecker) erstellt hat.Nehmen wir für das Beispiel an, Sie haben eine Klasse
Person
mit nur aname
.Google GSON ( Maven )
Mein persönlicher Favorit in Bezug auf die großartige JSON-Serialisierung / De-Serialisierung von Objekten.
Aktualisieren
Wenn Sie ein einzelnes Attribut herausholen möchten, können Sie dies auch problemlos mit der Google-Bibliothek tun:
Org.JSON ( Maven )
Wenn Sie keine Objekt-De-Serialisierung benötigen, sondern nur ein Attribut erhalten möchten, können Sie org.json ausprobieren ( oder das obige GSON-Beispiel betrachten! ).
Jackson ( Maven )
quelle
JsonNode
s, GSON hat etwas Ähnliches). Könnte gut sein, um Schnipsel zu zeigen, da dies der einzigen Möglichkeit ähnelt, die org.json bietet.Wenn Sie ein Java-Objekt aus JSON erstellen möchten und umgekehrt, verwenden Sie GSON- oder JACKSON-Jars von Drittanbietern usw.
Wenn Sie jedoch nur eine JSON-Zeichenfolge analysieren und einige Werte abrufen möchten (ODER eine JSON-Zeichenfolge von Grund auf neu erstellen möchten, um sie über Kabel zu senden), verwenden Sie einfach das JaveEE-JAR, das JsonReader, JsonArray, JsonObject usw. enthält. Möglicherweise möchten Sie die Implementierung davon herunterladen Spezifikation wie javax.json. Mit diesen beiden Gläsern kann ich den JSON analysieren und die Werte verwenden.
Diese APIs folgen tatsächlich dem DOM / SAX-Parsing-Modell von XML.
quelle
Quick-JSON-Parser ist sehr einfach, flexibel, sehr schnell und anpassbar. Versuch es
Eigenschaften:
Es kann folgendermaßen verwendet werden:
quelle
Sie könnten Google Gson verwenden .
Mit dieser Bibliothek müssen Sie nur ein Modell mit derselben JSON-Struktur erstellen. Dann wird das Modell automatisch ausgefüllt. Sie müssen Ihre Variablen als JSON-Schlüssel aufrufen oder verwenden,
@SerializedName
wenn Sie andere Namen verwenden möchten.JSON
Aus Ihrem Beispiel:
Modell
Parsing
Jetzt können Sie mit der Gson-Bibliothek analysieren:
Gradle-Import
Denken Sie daran, die Bibliothek in die Gradle-Datei der App zu importieren
Automatische Modellgenerierung
Sie können Modell generieren von JSON automatisch Online - Tools wie mit dieser .
quelle
Fast alle Antworten erfordern eine vollständige Deserialisierung des JSON in ein Java-Objekt, bevor auf den Wert in der interessierenden Eigenschaft zugegriffen werden kann. Eine andere Alternative, die diesen Weg nicht geht, ist die Verwendung von JsonPATH, das XPath für JSON ähnelt und das Durchlaufen von JSON-Objekten ermöglicht.
Es ist eine Spezifikation und die guten Leute von JayWay haben eine Java-Implementierung für die Spezifikation erstellt, die Sie hier finden: https://github.com/jayway/JsonPath
Um es zu verwenden, fügen Sie es Ihrem Projekt hinzu, z. B.:
und zu verwenden:
usw...
Weitere Informationen zu den anderen Möglichkeiten zum Überqueren von JSON finden Sie auf der JsonPath-Spezifikationsseite.
quelle
A - Erklärung
Sie können Jackson- Bibliotheken verwenden, um JSON-Zeichenfolgen in POJO- Instanzen ( Plain Old Java Object ) zu binden . POJO ist einfach eine Klasse mit nur privaten Feldern und öffentlichen Getter / Setter-Methoden. Jackson wird die Methoden durchlaufen (mithilfe von Reflection ) und das JSON-Objekt der POJO-Instanz zuordnen, wenn die Feldnamen der Klasse zu den Feldnamen des JSON-Objekts passen.
In Ihrem JSON-Objekt, das eigentlich ein zusammengesetztes Objekt ist, besteht das Hauptobjekt aus zwei Unterobjekten. Unsere POJO-Klassen sollten also dieselbe Hierarchie haben. Ich werde das gesamte JSON-Objekt als Page- Objekt aufrufen . Das Seitenobjekt besteht aus einem PageInfo- Objekt und einem Beitrag Objektarray.
Wir müssen also drei verschiedene POJO-Klassen erstellen.
Das einzige Paket, das ich verwendet habe, ist Jackson ObjectMapper. Wir binden Daten.
Die erforderlichen Abhängigkeiten, die JAR-Dateien, sind unten aufgeführt;
Hier ist der erforderliche Code;
B - Hauptklasse POJO: Seite
C - Kind POJO Klasse: PageInfo
D - Kind POJO Klasse: Post
E - Beispiel-JSON-Datei: sampleJSONFile.json
Ich habe gerade Ihr JSON-Beispiel in diese Datei kopiert und unter den Projektordner gelegt.
F - Demo-Code
G - Demo-Ausgabe
quelle
Verwenden Sie minimal-json, das sehr schnell und einfach zu bedienen ist. Sie können aus String obj und Stream analysieren.
Beispieldaten:
Parsing:
JSON erstellen:
Maven:
quelle
Ich glaube, die beste Vorgehensweise sollte darin bestehen, die offizielle Java JSON-API zu verwenden, die noch in Arbeit ist.
quelle
Da es noch niemand erwähnt hat, ist hier ein Anfang einer Lösung mit Nashorn (JavaScript-Laufzeitteil von Java 8, aber in Java 11 veraltet).
Lösung
Leistungsvergleich
Ich habe JSON-Inhalte geschrieben, die drei Arrays mit jeweils 20, 20 und 100 Elementen enthalten. Ich möchte nur die 100 Elemente aus dem dritten Array erhalten. Ich verwende die folgende JavaScript-Funktion, um meine Einträge zu analysieren und abzurufen.
Das millionenfache Ausführen des Anrufs mit Nashorn dauert 7,5 bis 7,8 Sekunden
org.json dauert 20 ~ 21 Sekunden
Jackson braucht 6,5 ~ 7 Sekunden
In diesem Fall schneidet Jackson besser ab als Nashorn, was viel besser abschneidet als org.json. Die Nashorn-API ist schwieriger zu verwenden als die von org.json oder Jackson. Abhängig von Ihren Anforderungen können Jackson und Nashorn beide praktikable Lösungen sein.
quelle
"
"? Nicht Zoll? Ist es Sekunden? Protokoll?ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
Das folgende Beispiel zeigt, wie der Text in der Frage gelesen wird, der als "jsonText" -Variable dargestellt wird. Diese Lösung verwendet die Java EE7- API javax.json (die in einigen anderen Antworten erwähnt wird). Der Grund, warum ich es als separate Antwort hinzugefügt habe, ist, dass der folgende Code zeigt, wie auf einige der in der Frage angezeigten Werte tatsächlich zugegriffen werden kann. Eine Implementierung der javax.json-API wäre erforderlich, damit dieser Code ausgeführt wird. Das vollständige Paket für jede der erforderlichen Klassen war enthalten, da ich keine "import" -Anweisungen deklarieren wollte.
Bevor jemand diese Antwort ablehnt, weil sie nicht GSON, org.json, Jackson oder eines der anderen verfügbaren Frameworks von Drittanbietern verwendet, ist dies ein Beispiel für "erforderlichen Code" pro Frage, um den bereitgestellten Text zu analysieren. Mir ist klar, dass die Einhaltung des aktuellen Standards JSR 353 für JDK 9 nicht berücksichtigt wurde. Daher sollte die JSR 353-Spezifikation genauso behandelt werden wie jede andere JSON-Handhabungsimplementierung von Drittanbietern.
quelle
Das hat mich umgehauen, wie einfach es war. Sie können einfach ein
String
Halten Ihres JSON an den Konstruktor eines JSONObject im Standardpaket org.json übergeben.Erledigt. Lässt das Mikrofon fallen . Dies funktioniert auch mit
JSONObjects
. Danach können Sie einfach Ihre Hierarchie derObjects
Verwendung derget()
Methoden für Ihre Objekte durchsehen.quelle
JSONArray
Typ ist nicht Teil der J2SE JDK-API, und Sie sagen nicht, welche API oder Drittanbieter-Bibliothek diesen Typ bereitstellt.In Java sind viele JSON-Bibliotheken verfügbar.
Die bekanntesten sind: Jackson, GSON, Genson, FastJson und org.json.
Es gibt normalerweise drei Dinge, die man bei der Auswahl einer Bibliothek beachten sollte:
Speziell für JSON-Bibliotheken (und alle Serialisierungs- / Deserialisierungsbibliotheken) ist die Datenbindung normalerweise auch von Interesse, da das Schreiben von Boiler-Plate-Code zum Packen / Entpacken der Daten nicht mehr erforderlich ist.
Für 1 siehe diesen Benchmark: https://github.com/fabienrenaud/java-json-benchmark Ich habe JMH verwendet, das die Leistung von Serialisierern und Deserialisierern unter Verwendung von Stream (jackson, gson, genson, fastjson, org.json, jsonp) vergleicht und Datenbindungs-APIs. Für 2 finden Sie zahlreiche Beispiele im Internet. Der obige Benchmark kann auch als Quelle für Beispiele verwendet werden ...
Schnelles Herausnehmen des Benchmarks: Jackson schneidet fünf- bis sechsmal besser ab als org.json und mehr als zweimal besser als GSON.
Für Ihr spezielles Beispiel dekodiert der folgende Code Ihren JSON mit Jackson:
Lassen Sie mich wissen, wenn Sie Fragen haben.
quelle
Zusätzlich zu anderen Antworten empfehle ich diesen Online- OpenSource- Dienst jsonschema2pojo.org zum schnellen Generieren von Java-Klassen aus json oder json schema für GSON, Jackson 1.x oder Jackson 2.x. Zum Beispiel, wenn Sie haben:
Das jsonschema2pojo.org für GSON generiert:
quelle
Wenn Sie eine Java-Klasse (z. B. Nachricht) haben, die die JSON-Zeichenfolge (jsonString) darstellt, können Sie die Jackson JSON-Bibliothek verwenden mit:
und vom Nachrichtenobjekt können Sie jedes seiner Attribute abrufen.
quelle
Gson ist leicht zu erlernen und zu implementieren. Was wir wissen müssen, sind zwei Methoden
toJson () - Konvertiert das Java-Objekt in das JSON-Format
fromJson () - Konvertiert JSON in ein Java-Objekt
`
`
quelle
Es sind viele Open Source-Bibliotheken vorhanden, um JSON-Inhalte auf ein Objekt zu analysieren oder nur JSON-Werte zu lesen. Sie müssen lediglich Werte lesen und in ein benutzerdefiniertes Objekt analysieren. Die org.json-Bibliothek reicht also in Ihrem Fall aus.
Verwenden Sie die Bibliothek org.json, um sie zu analysieren und JsonObject zu erstellen:
Verwenden Sie nun dieses Objekt, um Ihre Werte abzurufen:
Ein vollständiges Beispiel finden Sie hier:
So analysieren Sie JSON in Java
quelle
Bitte machen Sie so etwas:
quelle
Sie können die Gson-Bibliothek verwenden, um die JSON-Zeichenfolge zu analysieren.
Sie können das Array "posts" auch folgendermaßen durchlaufen:
quelle
quelle
Lesen Sie den folgenden Blog-Beitrag, JSON in Java .
Dieser Beitrag ist ein bisschen alt, aber ich möchte trotzdem Ihre Frage beantworten.
Schritt 1: Erstellen Sie eine POJO-Klasse Ihrer Daten.
Schritt 2: Erstellen Sie nun ein Objekt mit JSON.
Weitere Informationen finden Sie unter folgendem Link .
quelle
Die häufigsten Antworten auf dieser Seite verwenden zu einfache Beispiele wie Objekte mit einer Eigenschaft (z. B. {Name: Wert}). Ich denke, dass ein noch einfaches, aber reales Beispiel jemandem helfen kann.
Dies ist also der von der Google Translate API zurückgegebene JSON:
Ich möchte den Wert des Attributs "translateText", z. B. "Arbeit", mit Gson von Google abrufen.
Zwei mögliche Ansätze:
Rufen Sie nur ein benötigtes Attribut ab
Erstellen Sie ein Java-Objekt aus JSON
...
quelle
Dazu müssen Sie zunächst eine Implementierungsbibliothek auswählen .
Die Java-API für die JSON-Verarbeitung (JSR 353) bietet tragbare APIs zum Parsen, Generieren, Transformieren und Abfragen von JSON mithilfe von Objektmodell- und Streaming-APIs.
Die Referenzimplementierung finden Sie hier: https://jsonp.java.net/
Hier finden Sie eine Liste der Implementierungen von JSR 353:
Welche API implementiert JSR-353 (JSON)?
Und um Ihnen bei der Entscheidung zu helfen ... Ich habe auch diesen Artikel gefunden:
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Wenn Sie sich für Jackson entscheiden, finden Sie hier einen guten Artikel über die Konvertierung zwischen JSON nach / von Java mit Jackson: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- Jackson/
Ich hoffe es hilft!
quelle
Sie können Jayway JsonPath verwenden . Unten finden Sie einen GitHub-Link mit Quellcode, POM-Details und guter Dokumentation.
https://github.com/jayway/JsonPath
Bitte befolgen Sie die folgenden Schritte.
Schritt 1 : Fügen Sie die Jayway-JSON-Pfadabhängigkeit mit Maven in Ihren Klassenpfad ein oder laden Sie die JAR-Datei herunter und fügen Sie sie manuell hinzu.
Schritt 2 : Bitte speichern Sie Ihren Eingabe-JSON als Datei für dieses Beispiel. In meinem Fall habe ich Ihren JSON als sampleJson.txt gespeichert. Beachten Sie, dass Sie ein Komma zwischen pageInfo und Posts verpasst haben.
Schritt 3 : Lesen Sie den JSON-Inhalt aus der obigen Datei mit bufferedReader und speichern Sie ihn als String.
Schritt 4 : Analysieren Sie Ihre JSON-Zeichenfolge mit dem jayway JSON-Parser.
Schritt 5 : Lesen Sie die Details wie unten.
Die Ausgabe wird sein :
quelle
Ich habe JSON wie folgt:
Java-Klasse
Code zum Konvertieren dieses JSON in eine Java-Klasse.
Maven
quelle
Man kann verwenden Apache @Model Anmerkung erstellen Java Modellklassen repräsentieren Struktur von JSON - Dateien und verwenden sie verschiedene Elemente in der für den Zugriff auf JSON Baum. Im Gegensatz zu anderen Lösungen funktioniert diese vollständig ohne Reflexion und ist daher für Umgebungen geeignet, in denen Reflexion unmöglich ist oder einen erheblichen Overhead mit sich bringt.
Es gibt ein Beispiel für ein Maven-Projekt, das die Verwendung zeigt. Zunächst definiert es die Struktur:
Anschließend werden die generierten Klassen RepositoryInfo und Owner verwendet, um den bereitgestellten Eingabestream zu analysieren und dabei bestimmte Informationen abzurufen:
Das ist es! Darüber hinaus gibt es hier eine Live-Übersicht, die ein ähnliches Beispiel zusammen mit der asynchronen Netzwerkkommunikation zeigt.
quelle
jsoniter
(jsoniterator) ist eine relativ neue und einfache json-Bibliothek, die einfach und schnell gestaltet wurde. Alles, was Sie tun müssen, um JSON-Daten zu deserialisieren, istWo
jsonData
ist eine Zeichenfolge von JSON-Daten.Weitere Informationen finden Sie auf der offiziellen Website .
quelle
Wir können die JSONObject-Klasse verwenden, um eine JSON-Zeichenfolge in ein JSON-Objekt zu konvertieren und über das JSON-Objekt zu iterieren. Verwenden Sie den folgenden Code.
quelle
Sie können die DSM- Stream-Parsing-Bibliothek zum Parsen komplexer JSON- und XML-Dokumente verwenden. DSM analysiert Daten nur einmal und lädt nicht alle Daten in den Speicher.
Angenommen, wir haben eine Page- Klasse, um bestimmte JSON-Daten zu deserialisieren.
Seitenklasse
Erstellen Sie eine Yaml-Zuordnungsdatei.
Verwenden Sie DSM, um Felder zu extrahieren.
Seite Variable Json serialisiert:
DSM ist sehr gut für komplexe JSON und XML.
quelle
Sie können
JsonNode
eine strukturierte Baumdarstellung Ihrer JSON-Zeichenfolge verwenden. Es ist Teil der allgegenwärtigen Jackson- Bibliothek, die allgegenwärtig ist.quelle