Uvod u JSON-Javu (org.json)
1. Uvod u JSON-Javu
JSON (kratica za JavaScript Object Notation) lagan je format za razmjenu podataka i jest najčešće se koristi za komunikaciju klijent-poslužitelj. Jednostavno ga je čitati / pisati i neovisno o jeziku. JSON vrijednost može biti drugi JSON objekt, niz, broj, niz, logička vrijednost (istinito / netačno) ili null.
U ovom uputstvu vidjet ćemo kako možemo stvoriti, manipulirati i raščlaniti JSON koristeći jednu od dostupnih knjižnica obrade JSON, tj. JSON-Java knjižnica je također poznata kao org.json.
2. Preduvjet
Prije nego što započnemo, morat ćemo dodati sljedeću ovisnost u našu pom.xml:
org.json json 20180130
Najnoviju verziju možete pronaći u spremištu Maven Central.
Imajte na umu da je ovaj paket već uključen u Android SDK, pa ga ne bismo trebali uključiti dok ga upotrebljavamo.
3. JSON u Javi [paket org.json]
JSON-Java knjižnica također je poznata kao org.json (da se ne miješa s Googleovim org.json.simple) pruža nam klase koje se koriste za raščlanjivanje i manipulaciju JSON-om na Javi.
Nadalje, ova knjižnica također može pretvoriti između JSON-a, XML-a, HTTP zaglavlja, kolačića, popisa s tekstom i s tekstom itd.
U ovom uputstvu ćemo pogledati:
- JSONObject - slično izvornom jeziku Java Karta poput objekta koji pohranjuje neuređene parove ključ / vrijednost
- JSONArray - uređeni slijed vrijednosti sličan Java izvornoj implementaciji Vector
- JSONTokener - alat koji dijeli dio teksta na niz žetoni koje može koristiti JSONObject ili JSONArray za raščlanjivanje JSON nizova
- CDL - alat koji pruža metode za pretvaranje teksta razdvojenog zarezom u JSONArray i obrnuto
- Kolačić - pretvara iz JSON - a Niz na kolačiće i obrnuto
- HTTP - koristi se za pretvorbu iz JSON-a Niz na HTTP zaglavlja i obrnuto
- JSONException - ovo je standardni izuzetak koji donosi ova knjižnica
4. JSONObject
A JSONObject je nesređena kolekcija parova ključeva i vrijednosti, nalik na izvorni Java Karta implementacije.
- Tipke su jedinstvene Žice to ne može biti null
- Vrijednosti mogu biti sve od a Booleova, Broj, Niz, JSONArray ili čak a JSONObject.NULL objekt
- A JSONObject može se predstaviti s Niz zatvoren unutar kovrčavih zagrada s ključevima i vrijednostima odvojenim dvotočkom i parovima odvojenim zarezom
- Ima nekoliko konstruktora pomoću kojih se može konstruirati a JSONObject
Također podržava sljedeće glavne metode:
- get (ključ niza) - gpostavlja objekt povezan s isporučenim ključem, baca JSONException ako ključ nije pronađen
- opt (String key) - gpostavlja objekt povezan s isporučenim ključem, null inače
- put (ključ niza, vrijednost objekta) - umeće ili zamjenjuje par ključ / vrijednost u trenutnom JSONObject.
The staviti() metoda je preopterećena metoda koja prihvaća ključ tipa Niz i više tipova za vrijednost.
Potpuni popis metoda koje podržava JSONObject, posjetite službenu dokumentaciju.
Razmotrimo sada neke od glavnih operacija koje podržava ova klasa.
4.1. Izrada JSON-a izravno iz JSONObject
JSONObject izlaže API sličan Javinom Karta sučelje. Možemo koristiti staviti() metoda i kao argument daju ključ i vrijednost:
JSONObject jo = novi JSONObject (); jo.put ("ime", "jon doe"); jo.put ("dob", "22"); jo.put ("grad", "chicago");
Sada naš JSONObject izgledalo bi kao:
{"city": "chicago", "name": "jon doe", "age": "22"}
Postoji sedam različitih preopterećenih potpisa JSONObject.put () metoda. Iako ključ može biti samo jedinstven, ne-null Niz, vrijednost može biti bilo što.
4.2. Izrada JSON-a iz karte
Umjesto da izravno stavite ključ i vrijednosti u a JSONObject, možemo konstruirati običaj Karta a zatim ga proslijediti kao argument JSONObject'S konstruktor.
Ovaj će primjer dati iste rezultate kao gore:
Karta karte = novi HashMap (); map.put ("ime", "jon doe"); map.put ("dob", "22"); map.put ("grad", "chicago"); JSONObject jo = novi JSONObject (karta);
4.3. Stvaranje JSONObject iz JSON-a Niz
Za raščlanjivanje JSON-a Niz do a JSONObject, možemo samo proći Niz konstruktoru.
Ovaj će primjer dati iste rezultate kao gore:
JSONObject jo = novi JSONObject ("{\" grad \ ": \" chicago \ ", \" ime \ ": \" jon doe \ ", \" dob \ ": \" 22 \ "}"));
Položeno Niz argument mora biti valjani JSON, u suprotnom ovaj konstruktor može baciti a JSONException.
4.4. Serijalizirajte Java objekt u JSON-u
Jedan od JSONObject 's konstruktori uzima POJO kao svoj argument. U donjem primjeru paket koristi getere iz DemoBean razreda i stvara odgovarajuću JSONObject za isto.
Da biste dobili JSONObject iz Java objekta, morat ćemo koristiti klasu koja je valjani Java Bean:
DemoBean demo = novi DemoBean (); demo.setId (1); demo.setName ("lorem ipsum"); demo.setActive (true); JSONObject jo = novi JSONObject (demo);
The JSONObjekt jo za ovaj će primjer biti:
{"name": "lorem ipsum", "active": true, "id": 1}
Iako imamo način serializirati Java objekt u JSON niz, ne postoji način da ga pretvorimo natrag pomoću ove knjižnice.
Ako želimo takvu vrstu fleksibilnosti, možemo se prebaciti na druge knjižnice kao što je Jackson.
5. JSONArray
A JSONArray je uređena zbirka vrijednosti nalik izvornoj Javi Vektor provedba.
- Vrijednosti mogu biti sve od a Broj, Niz, Booleova, JSONArray, JSONObject ili čak a JSONObject.NULL objekt
- Zastupljen je s Niz umotana u uglate zagrade i sastoji se od zbirke vrijednosti odvojenih zarezima
- Kao JSONObject, ima konstruktor koji prihvaća izvor Niz i raščlanjuje ga za konstrukciju a JSONArray
Slijede primarne metode JSONArray razred:
- get (int indeks) - reurns vrijednost u navedenom indeksu (između 0 i ukupne dužine - 1), u suprotnom baca a JSONException
- opt (int indeks) - vraća vrijednost povezanu s indeksom (između 0 i ukupne duljine - 1). Ako u tom indeksu nema vrijednosti, tada a null se vraća
- put (vrijednost objekta) - tome dodaj vrijednost objekta JSONArray. Ova je metoda preopterećena i podržava širok raspon tipova podataka
Potpuni popis metoda koje podržava JSONArray potražite u službenoj dokumentaciji.
5.1. Stvaranje JSONArray
Nakon što smo inicijalizirali JSONArray objekt, možemo jednostavno dodavati i dohvatiti elemente pomoću staviti() i dobiti() metode:
JSONArray ja = novi JSONArray (); ja.put (Boolean.TRUE); ja.put ("lorem ipsum"); JSONObject jo = novi JSONObject (); jo.put ("ime", "jon doe"); jo.put ("dob", "22"); jo.put ("grad", "chicago"); ja.put (jo);
Slijedili bi sadržaji našeg JSONArray(kôd je formatiran radi preglednosti):
[true, "lorem ipsum", {"city": "chicago", "name": "jon doe", "age": "22"}]
5.2. Stvaranje JSONArray Izravno iz JSON Stringa
Kao JSONObject the JSONArray također ima konstruktor koji kreira Java objekt izravno iz JSON-a Niz:
JSONArray ja = novi JSONArray ("[istina, \" lorem ipsum \ ", 215]");
Ovaj konstruktor može baciti a JSONException ako je izvor Niz nije valjani JSON Niz.
5.3. Stvaranje JSONArray Izravno iz zbirke ili niza
Konstruktor za JSONArray također podržava objekte kolekcije i niza kao argumente.
Jednostavno ih prosljeđujemo kao argument konstruktoru i on će vratiti a JSONArray objekt:
Lista popisa = novi ArrayList (); list.add ("Kalifornija"); list.add ("Teksas"); list.add ("Havaji"); list.add ("Aljaska"); JSONArray ja = novi JSONArray (popis);
Sada naš JSONArray sastoji se od:
["Kalifornija", "Teksas", "Havaji", "Aljaska"]
6. JSONTokener
A JSONTokener uzima izvor Niz kao ulaz u svoj konstruktor i iz njega izvlači znakove i znakove. Interno ga koriste klase ovog paketa (poput JSONObject, JSONArray) za raščlanjivanje JSON-a Žice.
Možda neće biti mnogo situacija u kojima ćemo izravno koristiti ovu klasu jer se ista funkcionalnost može postići i drugim jednostavnijim metodama (poput string.toCharArray ()):
JSONTokener jt = novi JSONTokener ("lorem"); while (jt.more ()) {Log.info (jt.next ()); }
Sada možemo pristupiti a JSONTokener poput iteratora, koristeći više() metoda za provjeru postoje li preostali elementi i Sljedeći() za pristup sljedećem elementu.
Oznake primljene iz prethodnog primjera bit će:
l o r e m
7. CDL
Opskrbljeni smo CDL-om (Popis razdvojen zarezom) klasa za pretvaranje teksta razdvojenog zarezom u JSONArray i obrnuto.
7.1. Proizvodnja JSONArray Izravno iz teksta razgraničenog zarezom
Da bi se dobio a JSONArray izravno iz teksta razdvojenog zarezom, možemo koristiti statičku metodu rowToJSONArray () koja prihvaća a JSONTokener:
JSONArray ja = CDL.rowToJSONArray (novi JSONTokener ("Engleska, SAD, Kanada"));
Naše JSONArray sada se sastoji od:
["Engleska", "SAD", "Kanada"]
7.2. Izrada teksta razdvojenog zarezom iz JSONArray
Da biste preokrenuli prethodni korak i vratili tekst razdvojen zarezom JSONArray, možemo koristiti:
JSONArray ja = novi JSONArray ("[\" Engleska \ ", \" SAD \ ", \" Kanada \ "]"); Niz cdt = CDL.rowToString (ja);
The Nizcdt sada sadrži:
Engleska, SAD, Kanada
7.3. Proizvodnja JSONArray od JSONObjects Kori {tenjem teksta razdvojenog zarezima
Za proizvodnju a JSONArray od JSONObjects, poslužit ćemo se tekstom Niz sadrži zaglavlja i podatke odvojene zarezima.
Različite se crte odvajaju pomoću vraćanja kočije (\ r) ili linijski feed (\ n).
Prvi redak tumači se kao popis zaglavlja, a svi sljedeći retci tretiraju se kao podaci:
Niz niza = "ime, grad, dob \ n" + "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; Rezultat JSONArray = CDL.toJSONArray (niz);
Predmet Rezultat JSONArray sada se sastoji od (izlaz formatiran radi jasnoće):
[{"name": "john", "city": "chicago", "age": "22"}, {"name": "gary", "city": "florida", "age": "35 "}, {" name ":" sal "," city ":" vegas "," age ":" 18 "}]
Primijetite da su u ovom primjeru i podaci i zaglavlje isporučeni unutar istog Niz.Postoji alternativni način za to gdje možemo postići istu funkcionalnost isporukom a JSONArray koja bi se koristila za dobivanje zaglavlja i razdvojenih zarezom Niz radeći kao podaci.
Različite se crte odvajaju pomoću vraćanja kočije (\ r) ili linijski feed (\ n):
JSONArray ja = novi JSONArray (); ja.put ("ime"); ja.put ("grad"); ja.put ("dob"); Niz niza = "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; Rezultat JSONArray = CDL.toJSONArray (ja, niz);
Ovdje ćemo dobiti sadržaj predmeta proizlaziti točno kao i prije.
8. Kolačić
The Kolačić klasa bavi se kolačićima web preglednika i ima metode za pretvaranje kolačića preglednika u JSONObject i obrnuto.
Evo glavnih metoda Kolačić razred:
- toJsonObject (String sourceCookie) - pretvara niz kolačića u JSONObject
- toString (JSONObject jo) - ovo je obrnuto od prethodne metode, pretvara a JSONObject u kolačić Niz.
8.1. Pretvaranje kolačića Niz u a JSONObject
Za pretvaranje kolačića Niz do a JSONObject, dobro koristite statičku metodu Cookie.toJSONObject ():
Nizni kolačić = "korisničko ime = John Doe; istječe = četvrtak, 18. prosinca 2013. 12:00:00 UTC; put = /"; JSONObject cookieJO = Kolačić.toJSONObject (kolačić);
8.2. Pretvaranje a JSONObject u Cookie Niz
Sada ćemo pretvoriti a JSONObject u kolačić Niz. Ovo je obrnuto od prethodnog koraka:
String cookie = Cookie.toString (cookieJO);
9. HTTP
The HTTP klasa sadrži statičke metode koje se koriste za pretvaranje HTTP zaglavlja u JSONObject i obrnuto.
Ova klasa također ima dvije glavne metode:
- toJsonObject (String sourceHttpHeader) - pretvara a Niz HttpHeader do JSONObject
- toString (JSONObject jo) - pretvara isporučeno JSONObject do Niz
9.1. Pretvaranje JSONObject u HTTP zaglavlje
HTTP.toString () metoda koristi se za pretvaranje a JSONObject u HTTP zaglavlje Niz:
JSONObject jo = novi JSONObject (); jo.put ("Metoda", "POST"); jo.put ("Zahtjev-URI", "//www.example.com/"); jo.put ("HTTP-verzija", "HTTP / 1.1"); Niz httpStr = HTTP.toString (jo);
Evo, naša Niz httpStr sastojat će se od:
OBJAVI "//www.example.com/" HTTP / 1.1
Imajte na umu da dok pretvara zaglavlje HTTP zahtjeva, JSONObject mora sadržavati "Metoda",“URI zahtjev” i “HTTP verzija” tipke, dok za zaglavlje odgovora objekt mora sadržavati “HTTP verzija”,"Statusni kod" i "Razlog-fraza" parametri.
9.2. Pretvaranje HTTP zaglavlja Niz Natrag na JSONObject
Ovdje ćemo HTTP niz koji smo dobili u prethodnom koraku pretvoriti u sam JSONObject koje smo stvorili u tom koraku:
JSONObject obj = HTTP.toJSONObject ("POST \" // www.example.com/ \ "HTTP / 1.1");
10. JSONException
The JSONException je standardna iznimka koju ovaj paket izbacuje kad god se naiđe na pogrešku.
To se koristi u svim klasama iz ovog paketa. Iznimku obično prati poruka koja navodi što je točno pošlo po zlu.
11. Zaključak
U ovom uputstvu pogledali smo JSON koristeći Javu - org.json - i usredotočili smo se na neke ovdje dostupne osnovne funkcije.
Cjelokupne isječke koda korištene u ovom članku možete pronaći na GitHubu.