Úvod do jazyka JSON-Java (org.json)

1. Úvod do jazyka JSON-Java

JSON (skratka pre JavaScript Object Notation) je ľahký formát výmeny údajov a je sa najčastejšie používa na komunikáciu klient-server. Je ľahký na čítanie i zápis aj nezávislý od jazyka. Hodnota JSON môže byť iný JSON objekt, pole, číslo, reťazec, logická hodnota (pravda / nepravda) alebo nulový.

V tomto tutoriále uvidíme, ako môžeme vytvoriť, manipulovať a analyzovať JSON pomocou jednej z dostupných knižníc na spracovanie JSON, t. J. Knižnica JSON-Java je tiež známa ako org.json.

2. Predbežná požiadavka

Predtým, ako začneme, budeme musieť do našej databázy pridať nasledujúcu závislosť pom.xml:

 org.json json 20180130 

Najnovšiu verziu nájdete v úložisku Maven Central.

Upozorňujeme, že tento balík už bol súčasťou súpravy Android SDK, takže by sme ho nemali zahrnúť, keď ho používate.

3. JSON v Jave [balík org.json]

Knižnica JSON-Java je tiež známa ako org.json (nezamieňajte si s nástrojom org.json.simple spoločnosti Google) nám poskytuje triedy, ktoré sa používajú na analýzu a manipuláciu s formátom JSON v jazyku Java.

Ďalej môže táto knižnica tiež prevádzať medzi formátmi JSON, XML, hlavičkami HTTP, cookies, zoznamom oddeleným čiarkami alebo textom atď.

V tomto výučbe sa pozrieme na:

  1. JSONObject - podobný natívnemu Java Mapa ako objekt, ktorý ukladá neusporiadané páry kľúč - hodnota
  2. JSONArray - usporiadaná postupnosť hodnôt podobných natívnej implementácii Vector v Jave
  3. JSONTokener - nástroj, ktorý rozdeľuje kúsok textu na sériu žetóny ktoré môžu byť použité JSONObject alebo JSONArray analyzovať reťazce JSON
  4. CDL - nástroj, ktorý poskytuje metódy na prevod textu s čiarkami na a JSONArray a naopak
  5. Cookie Prevádza z JSON - String na cookies a naopak
  6. HTTP - používa sa na prevod z JSON String do hlavičiek HTTP a naopak
  7. JSONException - toto je štandardná výnimka vyvolaná touto knižnicou

4. JSONObject

A JSONObject je neusporiadaná kolekcia párov kľúčov a hodnôt, ktorá sa podobá natívnym jazykom Java Mapa implementácie.

  • Kľúče sú jedinečné Struny to nemôže byť nulový
  • Hodnoty môžu byť čokoľvek od a Boolovský, Číslo, String, JSONArray alebo dokonca a JSONObject.NULL objekt
  • A JSONObject môžu byť reprezentované a String uzavreté v zložených zátvorkách s kľúčmi a hodnotami oddelenými dvojbodkou a dvojicami oddelenými čiarkou
  • Má niekoľko konštruktorov, pomocou ktorých môže skonštruovať a JSONObject

Podporuje tiež nasledujúce hlavné metódy:

  1. get (reťazcový kľúč) - gets objekt spojený s dodaným kľúčom, hodí JSONException ak sa kľúč nenájde
  2. opt (reťazcový kľúč) - gets objekt spojený s dodaným kľúčom, nulový inak
  3. put (reťazec, hodnota objektu) - vloží alebo nahradí aktuálny pár kľúč - hodnota JSONObject.

The put () metóda je preťažená metóda, ktorá prijíma kľúč typu String a viac typov pre hodnotu.

Úplný zoznam metód podporovaných serverom JSONObject, navštívte oficiálnu dokumentáciu.

Poďme si teraz predstaviť niektoré hlavné operácie podporované touto triedou.

4.1. Vytváranie JSON priamo z JSONObject

JSONObject vystavuje API podobné Java Mapa rozhranie. Môžeme použiť put () metóda a zadať kľúč a hodnotu ako argument:

JSONObject jo = nový JSONObject (); jo.put ("meno", "jon doe"); jo.put ("vek", "22"); jo.put ("mesto", "chicago");

Teraz náš JSONObject bude vyzerať takto:

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

Existuje sedem rôznych preťažených podpisov JSONObject.put () metóda. Kľúč môže byť iba jedinečný, nenulový Reťazec, hodnota môže byť čokoľvek.

4.2. Vytvára sa JSON z mapy

Namiesto priameho vloženia kľúča a hodnôt do a JSONObject, môžeme skonštruovať zvyk Mapa a potom to odovzdať ako argument JSONObjectKonštruktor.

Tento príklad prinesie rovnaké výsledky ako vyššie:

Mapová mapa = nová HashMap (); map.put ("meno", "jon doe"); map.put ("vek", "22"); map.put ("mesto", "chicago"); JSONObject jo = nový JSONObject (mapa);

4.3. Tvorenie JSONObject od spoločnosti JSON String

Na analýzu súboru JSON String do a JSONObject, môžeme len prejsť String konštruktérovi.

Tento príklad prinesie rovnaké výsledky ako vyššie:

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

Prešiel String argument musí byť platný JSON, inak môže tento konštruktor hodiť a JSONException.

4.4. Serializujte objekt Java na JSON

Jeden z JSONObject 's konštruktory berie ako argument POJO. V nasledujúcom príklade balík využíva getre z DemoBean triedy a vytvorí vhodný JSONObject za to isté.

Ak chcete získať JSONObject z objektu Java budeme musieť použiť triedu, ktorá je platným objektom Java Bean:

DemoBean demo = nový DemoBean (); demo.setId (1); demo.setName ("lorem ipsum"); demo.setActive (true); JSONObject jo = nový JSONObject (ukážka);

The JSONObject jo v tomto príklade bude:

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

Aj keď máme spôsob, ako serializovať objekt Java na reťazec JSON, neexistuje spôsob, ako ho konvertovať späť pomocou tejto knižnice.

Ak chceme tento druh flexibility, môžeme prejsť na iné knižnice, napríklad Jackson.

5. JSONArray

A JSONArray je usporiadaná zbierka hodnôt, ktorá sa podobá natívnej Jave Vektor implementácia.

  • Hodnoty môžu byť čokoľvek od a Číslo, String, Boolovský, JSONArray, JSONObject alebo dokonca a JSONObject.NULL objekt
  • Predstavuje to a String zalomený do hranatých zátvoriek a pozostáva zo súboru hodnôt oddelených čiarkami
  • Páči sa mi to JSONObject, má konštruktor, ktorý prijíma zdroj String a analyzuje ho na zostrojenie a JSONArray

Nasledujú hlavné metódy metódy JSONArray trieda:

  1. get (int index) - rvráti hodnotu na zadaný index (medzi 0 a celkovou dĺžkou - 1), inak hodí a JSONException
  2. opt (int index) - vráti hodnotu spojenú s indexom (medzi 0 a celkovou dĺžkou - 1). Ak v tomto indexe nie je žiadna hodnota, potom a nulový sa vracia
  3. put (hodnota objektu) - k tomu pripojiť hodnotu objektu JSONArray. Táto metóda je preťažená a podporuje širokú škálu dátových typov

Kompletný zoznam metód podporovaných JSONArray nájdete v oficiálnej dokumentácii.

5.1. Tvorenie JSONArray

Po inicializácii objektu JSONArray môžeme jednoducho pridávať a načítavať prvky pomocou put () a dostať () metódy:

JSONArray ja = nový JSONArray (); ja.put (Boolean.TRUE); ja.put ("lorem ipsum"); JSONObject jo = nový JSONObject (); jo.put ("meno", "jon doe"); jo.put ("vek", "22"); jo.put ("mesto", "chicago"); ja.put (jo);

Nasledoval by obsah našej JSONArray(kód je naformátovaný kvôli prehľadnosti):

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

5.2. Tvorenie JSONArray Priamo z reťazca JSON

Páči sa mi to JSONObject the JSONArray má tiež konštruktor, ktorý vytvára objekt Java priamo z JSON String:

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

Tento konštruktér môže hodiť a JSONException ak zdroj String nie je platný súbor JSON String.

5.3. Tvorenie JSONArray Priamo zo zbierky alebo poľa

Konštruktér spoločnosti JSONArray tiež podporuje objekty kolekcie a poľa ako argumenty.

Jednoducho ich odovzdáme ako argument konštruktorovi a vráti a JSONArray objekt:

Zoznam zoznam = nový ArrayList (); list.add ("Kalifornia"); list.add ("Texas"); list.add ("Havaj"); list.add ("Aljaška"); JSONArray ja = nový JSONArray (zoznam);

Teraz náš JSONArray pozostáva z:

[„Kalifornia“, „Texas“, „Havaj“, „Aljaška“]

6. JSONTokener

A JSONTokener berie zdroj String ako vstup do svojho konštruktora a extrahuje z neho znaky a tokeny. Interne ho používajú triedy tohto balíka (ako JSONObject, JSONArray) na analýzu súboru JSON Struny.

Nemusí existovať veľa situácií, keď túto triedu použijeme priamo, pretože rovnaká funkčnosť sa dá dosiahnuť aj pomocou iných jednoduchších metód (napríklad string.toCharArray ()):

JSONTokener jt = nový JSONTokener ("lorem"); while (jt.more ()) {Log.info (jt.next ()); }

Teraz môžeme získať prístup k JSONTokener ako iterátor pomocou viac () - metóda na kontrolu, či zostali nejaké zvyšné prvky a - Ďalšie() pre prístup k ďalšiemu prvku.

Tokeny prijaté z predchádzajúceho príkladu budú:

l o r e m

7. CDL

Máme k dispozícii CDL (Zoznam oddelený čiarkami) trieda na prevod textu s čiarkami na a JSONArray a naopak.

7.1. Produkcia JSONArray Priamo z textu oddeleného čiarkami

Za účelom výroby a JSONArray priamo z textu oddeleného čiarkami môžeme použiť statickú metódu rowToJSONArray () ktorá prijíma a JSONTokener:

JSONArray ja = CDL.rowToJSONArray (nový JSONTokener ("Anglicko, USA, Kanada"));

Náš JSONArray teraz pozostáva z:

["Anglicko", "USA", "Kanada"]

7.2. Produkcia textu oddeleného čiarkami z JSONArray

Aby ste sa vrátili k predchádzajúcemu kroku a dostali späť text oddelený čiarkami JSONArray, môžeme použiť:

JSONArray ja = nový JSONArray ("[\" Anglicko \ ", \" USA \ ", \" Kanada \ "]"); Reťazec cdt = CDL.rowToString (ja);

The Stringcdt teraz obsahuje:

Anglicko, USA, Kanada

7.3. Produkcia JSONArray z JSONObjects Používanie textu oddeleného čiarkami

Na výrobu a JSONArray z JSONObjects, použijeme text String obsahujúce hlavičky aj dáta oddelené čiarkami.

Jednotlivé riadky sú oddelené pomocou operátora () alebo line feed (\ n).

Prvý riadok sa interpretuje ako zoznam hlavičiek a všetky nasledujúce riadky sa považujú za údaje:

Reťazcový reťazec = "meno, mesto, vek \ n" + "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; Výsledok JSONArray = CDL.toJSONArray (reťazec);

Objekt Výsledok JSONArray teraz pozostáva z (výstup formátovaný kvôli lepšej prehľadnosti):

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

Všimnite si, že v tomto príklade boli údaje aj hlavička dodané v rámci toho istého String.Existuje alternatívny spôsob, ako to dosiahnuť, keď môžeme dosiahnuť rovnakú funkcionalitu dodaním a JSONArray to by sa použilo na získanie hlavičiek a oddelených čiarkami String pracuje ako dáta.

Rôzne riadky sú oddelené pomocou operátora () alebo line feed (\ n):

JSONArray ja = nový JSONArray (); ja.put ("meno"); ja.put ("mesto"); ja.put ("vek"); Reťazcový reťazec = "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; Výsledok JSONArray = CDL.toJSONArray (ja, reťazec);

Tu dostaneme obsah objektu výsledok presne ako predtým.

8. Cookie

The Cookie trieda sa zaoberá súbormi cookie webového prehliadača a má metódy na premenu súborov cookie prehľadávača na a JSONObject a naopak.

Tu sú hlavné metódy Cookie trieda:

  1. toJsonObject (String sourceCookie) - prevádza reťazec súborov cookie na a JSONObject

  2. toString (JSONObject jo) - toto je obrátený postup z predchádzajúcej metódy, prevádza a JSONObject do cookie String.

8.1. Prevedenie súboru cookie String do a JSONObject

Ak chcete previesť súbor cookie String do a JSONObject, dobre použite statickú metódu Cookie.toJSONObject ():

Reťazec cookie = "používateľské meno = John Doe; platnosť končí = Št, 18. decembra 2013 12:00:00 UTC; cesta = /"; JSONObject cookieJO = Cookie.toJSONObject (cookie);

8.2. Prevod a JSONObject do súboru cookie String

Teraz prevedieme a JSONObject do cookie String. Toto je opačný postup ako v predchádzajúcom kroku:

Reťazec cookie = Cookie.toString (cookieJO);

9. HTTP

The HTTP trieda obsahuje statické metódy, ktoré sa používajú na prevod hlavičiek HTTP na JSONObject a naopak.

Táto trieda má tiež dve hlavné metódy:

  1. toJsonObject (String sourceHttpHeader) - prevádza a Reťazec HttpHeader do JSONObject
  2. toString (JSONObject jo) - prevádza dodané JSONObject do String

9.1. Prevádza JSONObject do hlavičky HTTP

HTTP.toString () metóda sa používa na prevod a JSONObject do hlavičky HTTP Reťazec:

JSONObject jo = nový JSONObject (); jo.put ("Metóda", "POST"); jo.put ("Request-URI", "//www.example.com/"); jo.put ("Verzia HTTP", "HTTP / 1.1"); Reťazec httpStr = HTTP.toString (jo);

Tu, náš Reťazec httpStr bude pozostávať z:

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

Upozorňujeme, že pri prevode hlavičky požiadavky HTTP sa znak JSONObject musí obsahovať „Metóda“,„Request-URI“ a „Verzia HTTP“ kľúče, zatiaľ čo pre hlavičku odpovede musí objekt obsahovať „Verzia HTTP“,„Status-Code“ a „Fráza dôvodu“ parametre.

9.2. Konverzia hlavičky HTTP String Späť k JSONObject

Tu prevedieme reťazec HTTP, ktorý sme dostali v predchádzajúcom kroku, späť na samotný JSONObject ktoré sme vytvorili v tomto kroku:

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

10. JSONException

The JSONException je štandardná výnimka vyvolaná týmto balíkom vždy, keď sa vyskytne akákoľvek chyba.

Používa sa vo všetkých triedach z tohto balíka. Po výnimke zvyčajne nasleduje správa, ktorá uvádza, čo sa presne pokazilo.

11. Záver

V tomto tutoriáli sme sa pozreli na JSON pomocou Java - org.json - a zamerali sme sa na niektoré základné funkcie, ktoré sú tu k dispozícii.

Kompletné útržky kódu použité v tomto článku nájdete na GitHub.