Einführung in JSON-Java (org.json)

Einführung in JSON-Java (org.json)

1. Einführung in JSON-Java

JSON (Abkürzung für JavaScript Object Notation) ist ein leichtes Datenaustauschformat und istmost commonly used for client-server communication.. Es ist sowohl einfach zu lesen / schreiben als auch sprachunabhängig. Ein JSON-Wert kann ein anderer JSONobject, array, number, string, boolean (wahr / falsch) odernull. sein

In diesem Lernprogramm erfahren Sie, wie Sie JSON mithilfe einer der verfügbaren JSON-Verarbeitungsbibliotheken erstellen, bearbeiten und analysieren können, d. H. Die Bibliothek vonJSON-Javawird auch alsorg.json.bezeichnet

Weitere Lektüre:

Durchlaufen einer Instanz von org.json.JSONObject

Erfahren Sie, wie Sie ein JSONObject durchlaufen und iterieren

Read more

Escape-JSON-Zeichenfolge in Java

Erfahren Sie, wie Sie einem JSON-String-Core-Java oder einer Bibliothek entkommen

Read more

2. Voraussetzung

Bevor wir beginnen, müssen wir unserenpom.xml die folgende Abhängigkeit hinzufügen:


    org.json
    json
    20180130

Die neueste Version finden Sie inMaven Central repository.

Beachten Sie, dass dieses Paket bereits im Android SDK enthalten ist. Wir sollten es daher nicht einschließen, wenn Sie dasselbe verwenden.

3. JSON in Java [Paket org.json]

DieJSON-Java-Bibliothek wird auch alsorg.json bezeichnet (nicht zu verwechseln mitorg.json.simple von Google). Sie bietet Klassen, mit denen JSON in Java analysiert und bearbeitet werden kann.

Darüber hinaus kann diese Bibliothek auch zwischen JSON, XML, HTTP-Headern, Cookies, durch Kommas getrennten Listen oder Texten usw. konvertieren.

In diesem Tutorial sehen wir uns Folgendes an:

  1. JSONObject - ähnelt dem nativenMap-ähnlichen Objekt von Java, in dem ungeordnete Schlüssel-Wert-Paare gespeichert sind

  2. JSONArray - eine geordnete Folge von Werten, die der nativen Vector-Implementierung von Java ähnelt

  3. JSONTokener - Ein Werkzeug, das einen Text in eine Reihe vontokens aufteilt, die vonJSONObject oderJSONArray zum Parsen von JSON-Zeichenfolgen verwendet werden können

  4. CDL - Ein Tool, das Methoden zum Konvertieren von durch Kommas getrenntem Text inJSONArray und umgekehrt bereitstellt

  5. Cookie - Konvertiert von JSONString in Cookies und umgekehrt

  6. HTTP - wird zum Konvertieren von JSONString in HTTP-Header und umgekehrt verwendet

  7. JSONException - Dies ist eine Standardausnahme, die von dieser Bibliothek ausgelöst wird

4. JSONObject

AJSONObject ist eine ungeordnete Sammlung von Schlüssel- und Wertepaaren, die den nativenMap-Implementierungen von Java ähnelt.

  • Schlüssel sind eindeutigeStrings, die nichtnull sein können

  • Werte können alles von einemBoolean,Number,String,JSONArray oder sogar einemJSONObject.NULL Objekt sein

  • EinJSONObject kann durch einString dargestellt werden, das in geschweiften Klammern mit durch einen Doppelpunkt getrennten Schlüsseln und Werten und durch ein Komma getrennten Paaren eingeschlossen ist

  • Es hat mehrere Konstruktoren, mit denen einJSONObject konstruiert werden kann

Es unterstützt auch die folgenden Hauptmethoden:

  1. get(String key) – getzt das dem angegebenen Schlüssel zugeordnete Objekt und löstJSONException aus, wenn der Schlüssel nicht gefunden wird

  2. opt(String key)- glegt das Objekt fest, das dem angegebenen Schlüssel zugeordnet ist, andernfallsnull

  3. put(String key, Object value) – fügt ein Schlüssel-Wert-Paar in das aktuelleJSONObject. ein oder ersetzt es

Die Methodeput() ist eine überladene Methode, die einen Schlüssel vom TypString und mehrere Typen für den Wert akzeptiert.

Für die vollständige Liste der vonJSONObject,visit the official documentation. unterstützten Methoden

Lassen Sie uns nun einige der Hauptoperationen diskutieren, die von dieser Klasse unterstützt werden.

4.1. JSON direkt ausJSONObject erstellen

JSONObject stellt eine API bereit, die derMap-Schnittstelle von Java ähnelt.. Wir können die Methodeput() verwenden und den Schlüssel und den Wert als Argument angeben:

JSONObject jo = new JSONObject();
jo.put("name", "jon doe");
jo.put("age", "22");
jo.put("city", "chicago");

Jetzt würden unsereJSONObject so aussehen:

{"city":"chicago","name":"jon doe","age":"22"}

Es gibt sieben verschiedene überladene Signaturen der MethodeJSONObject.put(). Während der Schlüssel nur eindeutig sein kann, kann der Wert ungleich NullString, alles sein.

4.2. JSON aus Map erstellen

Anstatt Schlüssel und Werte direkt inJSONObject einzufügen, können wir ein benutzerdefiniertesMap erstellen und es dann als Argument an den Konstruktor vonJSONObject übergeben.

Dieses Beispiel liefert die gleichen Ergebnisse wie oben:

Map map = new HashMap<>();
map.put("name", "jon doe");
map.put("age", "22");
map.put("city", "chicago");
JSONObject jo = new JSONObject(map);

4.3. JSONObject aus JSONString erstellen

Um ein JSONString in einJSONObject zu analysieren, können wir einfach dasString an den Konstruktor übergeben.

Dieses Beispiel liefert die gleichen Ergebnisse wie oben:

JSONObject jo = new JSONObject(
  "{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}"
);

Das übergebeneString-Argument muss ein gültiger JSON sein, andernfalls kann dieser KonstruktorJSONException auslösen.

4.4. Serialisieren Sie das Java-Objekt in JSON

Einer derJSONObject's-Konstruktoren verwendet ein POJO als Argument. Im folgenden Beispiel verwendet das Paket die Getter aus der KlasseDemoBean und erstellt dafür ein geeignetesJSONObject.

Um einJSONObject von einem Java-Objekt zu erhalten, müssen wir eine Klasse verwenden, die ein gültigesJava Bean ist:

DemoBean demo = new DemoBean();
demo.setId(1);
demo.setName("lorem ipsum");
demo.setActive(true);

JSONObject jo = new JSONObject(demo);

DieJSONObject jo für dieses Beispiel sind:

{"name":"lorem ipsum","active":true,"id":1}

Obwohl wir eine Möglichkeit haben, ein Java-Objekt in einen JSON-String zu serialisieren, gibt es keine Möglichkeit, es mit dieser Bibliothek zurück zu konvertieren.

Wenn wir diese Art von Flexibilität wünschen, können wir zu anderen Bibliotheken wieJackson wechseln.

5. JSONArray

AJSONArray ist eine geordnete Sammlung von Werten, die der nativen Implementierung von JavaVectorähnelt.

  • Werte können alles von einemNumber,String,Boolean,JSONArray,JSONObject oder sogar einemJSONObject.NULL Objekt sein

  • Es wird durch einStringin eckigen Klammern dargestellt und besteht aus einer Sammlung von Werten, die durch Kommas getrennt sind

  • WieJSONObject hat es einen Konstruktor, der eine QuelleString akzeptiert und analysiert, um einJSONArray zu konstruieren

Das Folgende sind die primären Methoden der KlasseJSONArray:

  1. get(int index) – retzt den Wert auf den angegebenen Index (zwischen 0 und Gesamtlänge - 1), andernfalls wird einJSONException ausgelöst

  2. opt(int index) - gibt den einem Index zugeordneten Wert zurück (zwischen 0 und Gesamtlänge - 1). Wenn dieser Index keinen Wert enthält, wird einnull zurückgegeben

  3. put(Object value) - Hängt einen Objektwert an diesenJSONArray. an. Diese Methode ist überladen und unterstützt eine Vielzahl von Datentypen

Eine vollständige Liste der von JSONArray unterstützten Methoden finden Sie untervisit the official documentation.

5.1. JSONArray erstellen

Sobald wir ein JSONArray-Objekt initialisiert haben, können wir Elemente einfach mit den Methodenput() undget()hinzufügen und abrufen:

JSONArray ja = new JSONArray();
ja.put(Boolean.TRUE);
ja.put("lorem ipsum");

JSONObject jo = new JSONObject();
jo.put("name", "jon doe");
jo.put("age", "22");
jo.put("city", "chicago");

ja.put(jo);

Es folgt der Inhalt unsererJSONArray (der Code ist aus Gründen der Übersichtlichkeit formatiert):

[
    true,
    "lorem ipsum",
    {
        "city": "chicago",
        "name": "jon doe",
        "age": "22"
    }
]

5.2. JSONArray direkt aus JSON-String erstellen

WieJSONObject hat auchJSONArray einen Konstruktor, der ein Java-Objekt direkt aus einem JSONString erstellt:

JSONArray ja = new JSONArray("[true, \"lorem ipsum\", 215]");

Dieser Konstruktor kannJSONException auslösen, wenn die QuelleString kein gültiger JSONString ist.

5.3. JSONArray direkt aus einer Sammlung oder einem Array erstellen

Der Konstruktor vonJSONArray unterstützt auch Sammlungs- und Arrayobjekte als Argumente.

Wir übergeben sie einfach als Argument an den Konstruktor und er gibt dasJSONArray-Objekt zurück:

List list = new ArrayList<>();
list.add("California");
list.add("Texas");
list.add("Hawaii");
list.add("Alaska");

JSONArray ja = new JSONArray(list);

Jetzt besteht unserJSONArray aus:

["California","Texas","Hawaii","Alaska"]

6. JSONTokener

EinJSONTokener nimmt eine QuelleString als Eingabe in seinen Konstruktor und extrahiert Zeichen und Token daraus. Es wird intern von Klassen dieses Pakets (wieJSONObject,JSONArray) verwendet, um JSONStrings. zu analysieren

Es gibt möglicherweise nicht viele Situationen, in denen wir diese Klasse direkt verwenden, da dieselbe Funktionalität mit anderen einfacheren Methoden (wiestring.toCharArray()) erreicht werden kann:

JSONTokener jt = new JSONTokener("lorem");

while(jt.more()) {
    Log.info(jt.next());
}

Jetzt können wir wie ein Iterator aufJSONTokener zugreifen, indem wir mit der Methodemore() prüfen, ob noch Elemente vorhanden sind, und mitnext() auf das nächste Element zugreifen.

Die aus dem vorherigen Beispiel erhaltenen Token sind:

l
o
r
e
m

7. CDL

Wir erhalten eineCDL (Comma Delimited List)-Klasse, um durch Kommas getrennten Text inJSONArray umzuwandeln und umgekehrt.

7.1. JSONArray direkt aus durch Kommas getrenntem Text erzeugen

Um einJSONArray direkt aus dem durch Kommas getrennten Text zu erzeugen, können wir die statische MethoderowToJSONArray() verwenden, die einJSONTokener akzeptiert:

JSONArray ja = CDL.rowToJSONArray(new JSONTokener("England, USA, Canada"));

UnsereJSONArray bestehen jetzt aus:

["England","USA","Canada"]

7.2. Erstellen von durch Kommas getrenntem Text aus JSONArray

Um den vorherigen Schritt umzukehren und den durch Kommas getrennten Text vonJSONArray zurückzugewinnen, können wir Folgendes verwenden:

JSONArray ja = new JSONArray("[\"England\",\"USA\",\"Canada\"]");
String cdt = CDL.rowToString(ja);

DasStringcdt enthält jetzt:

England,USA,Canada

7.3. JSONArray vonJSONObjects mit durch Kommas getrenntem Text erzeugen

UmJSONArray vonJSONObjects zu erzeugen, verwenden wir einen TextString, der sowohl Überschriften als auch durch Kommas getrennte Daten enthält.

Die verschiedenen Zeilen werden mit einem Wagenrücklauf( ) oder einem Zeilenvorschub( ). getrennt

Die erste Zeile wird als eine Liste von Überschriften interpretiert und alle nachfolgenden Zeilen werden als Daten behandelt:

String string = "name, city, age \n" +
  "john, chicago, 22 \n" +
  "gary, florida, 35 \n" +
  "sal, vegas, 18";

JSONArray result = CDL.toJSONArray(string);

Das ObjektJSONArray result besteht nun aus (der Übersichtlichkeit halber formatierte Ausgabe):

[
    {
        "name": "john",
        "city": "chicago",
        "age": "22"
    },
    {
        "name": "gary",
        "city": "florida",
        "age": "35"
    },
    {
        "name": "sal",
        "city": "vegas",
        "age": "18"
    }
]

Beachten Sie, dass in diesem Beispiel sowohl Daten als auch Header innerhalb derselbenString.There’s an alternative way of doing this where we can achieve the same functionality by supplying a JSONArray that would be used to get the headers and a comma-delimited String working as the data. geliefert wurden

Verschiedene Zeilen werden mit einem Wagenrücklauf( ) oder einem Zeilenvorschub( ): getrennt

JSONArray ja = new JSONArray();
ja.put("name");
ja.put("city");
ja.put("age");

String string = "john, chicago, 22 \n"
  + "gary, florida, 35 \n"
  + "sal, vegas, 18";

JSONArray result = CDL.toJSONArray(ja, string);

Hier erhalten wir den Inhalt von Objektresultgenau wie zuvor.

Die KlasseCookie behandelt Webbrowser-Cookies und verfügt über Methoden zum Konvertieren eines Browser-Cookies inJSONObject und umgekehrt.

Hier sind die Hauptmethoden derCookie-Klasse:

  1. toJsonObject(String sourceCookie) – konvertiert eine Cookie-Zeichenfolge inJSONObject

  2. toString(JSONObject jo) - Dies ist die Umkehrung der vorherigen Methode und konvertiert einJSONObject in ein CookieString.

Verwenden Sie die statische MethodeCookie.toJSONObject(), um ein CookieString in einJSONObject zu konvertieren:

String cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";
JSONObject cookieJO = Cookie.toJSONObject(cookie);

Jetzt konvertieren wir einJSONObject in ein CookieString.. Dies ist die Umkehrung des vorherigen Schritts:

String cookie = Cookie.toString(cookieJO);

9. HTTP

Die KlasseHTTP enthält statische Methoden, mit denen HTTP-Header inJSONObject konvertiert werden und umgekehrt.

Diese Klasse hat auch zwei Hauptmethoden:

  1. toJsonObject(String sourceHttpHeader) – wandelt aHttpHeader String inJSONObject um

  2. toString(JSONObject jo) - konvertiert die geliefertenJSONObject inString

9.1. Konvertieren vonJSONObject in einen HTTP-Header

Die MethodeHTTP.toString() wird verwendet, umJSONObject in HTTP-HeaderString: zu konvertieren

JSONObject jo = new JSONObject();
jo.put("Method", "POST");
jo.put("Request-URI", "http://www.example.com/");
jo.put("HTTP-Version", "HTTP/1.1");
String httpStr = HTTP.toString(jo);

Hier bestehen unsereString httpStr aus:

POST "http://www.example.com/" HTTP/1.1

Beachten Sie, dass beim Konvertieren eines HTTP-Anforderungsheaders dieJSONObject“Method”,“Request-URI” und“HTTP-Version” Schlüssel enthalten müssen, während das Objekt für den Antwortheader“HTTP-Version”, enthalten muss “Status-Code” und“Reason-Phrase” Parameter.

9.2. Konvertieren des HTTP-HeadersString Zurück zuJSONObject

Hier konvertieren wir die HTTP-Zeichenfolge, die wir im vorherigen Schritt erhalten haben, zurück in dieJSONObject, die wir in diesem Schritt erstellt haben:

JSONObject obj = HTTP.toJSONObject("POST \"http://www.example.com/\" HTTP/1.1");

10. JSONException

JSONException ist die Standardausnahme, die von diesem Paket ausgelöst wird, wenn ein Fehler auftritt.

Dies wird in allen Klassen dieses Pakets verwendet. Auf die Ausnahme folgt normalerweise eine Meldung, die angibt, was genau schief gelaufen ist.

11. Fazit

In diesem Tutorial haben wir uns einen JSON mit Java -org.json - angesehen und uns auf einige der hier verfügbaren Kernfunktionen konzentriert.

Die vollständigen Codefragmente, die in diesem Artikel verwendet werden, finden Sie inover on GitHub.