Bevezetés a JSON-Java-ba (org.json)
1. Bevezetés a JSON-Java-ba
A JSON (a JavaScript Object Notation rövidítése) könnyű adatcsere-formátum, és az leggyakrabban kliens-szerver kommunikációra használják. Könnyen olvasható / írható és nyelvfüggetlen is. A JSON érték lehet egy másik JSON objektum, tömb, szám, karakterlánc, logikai érték (igaz / hamis) vagy nulla.
Ebben az oktatóanyagban megtudhatjuk, hogyan hozhatunk létre, kezelhetünk és elemezhetünk JSON-t a rendelkezésre álló JSON-feldolgozó könyvtárak egyikével, vagyis a JSON-Java könyvtár más néven org.json.
2. Előfeltételezés
Mielőtt elkezdenénk, hozzá kell adnunk a következő függőséget a mi pom.xml:
org.json json 20180130
A legújabb verzió megtalálható a Maven Central adattárban.
Ne feledje, hogy ezt a csomagot már beépítették az Android SDK-ba, ezért ne használjuk fel, miközben ugyanazt használjuk.
3. JSON Java-ban [org.json csomag]
A JSON-Java könyvtár más néven org.json (nem tévesztendő össze a Google org.json.simple szolgáltatásával) olyan osztályokat biztosít számunkra, amelyeket a JSON elemzésére és kezelésére használnak a Java-ban.
Ezenkívül ez a könyvtár konvertálhat JSON, XML, HTTP fejlécek, cookie-k, vesszővel tagolt lista vagy szöveg stb. Között is.
Ebben az oktatóanyagban megnézzük:
- JSONObject - hasonló a Java anyanyelvéhez Térkép mint objektum, amely rendezetlen kulcs-érték párokat tárol
- JSONArray - a Java natív Vector megvalósításához hasonló sorrendű értéksor
- JSONTokener - olyan eszköz, amely egy szövegrészt szétbont tokenek amelyet felhasználhat JSONObject vagy JSONArray a JSON húrok elemzéséhez
- CDL - egy olyan eszköz, amely módszereket biztosít a vesszővel elválasztott szöveg a JSONArray és fordítva
- Aprósütemény - megtért a JSON-ból Húr sütikre és fordítva
- HTTP - a JSON-ból való konvertáláshoz használt Húr a HTTP fejlécekre és fordítva
- JSONException - ez egy általános kivétel, amelyet ez a könyvtár dob
4. JSONObject
A JSONObject a kulcs és érték párok rendezetlen gyűjteménye, amely hasonlít a Java őshonos nyelvéhez Térkép megvalósítások.
- A kulcsok egyediek Húrok az nem lehet nulla
- Az értékek bármi lehetnek a Logikai, Szám, Húr, JSONArray vagy akár a JSONObject.NULL tárgy
- A JSONObject ábrázolható a Húr göndör zárójelbe zárva, kettővel elválasztott kulcsokkal és értékekkel, vesszővel elválasztott párokkal
- Számos konstruktora van, amelyekkel a JSONObject
A következő fő módszereket is támogatja:
- get (karakterlánc-kulcs) - gets a mellékelt kulccsal társított objektum, dob JSONException ha a kulcs nem található
- opció (karakterlánc billentyű) - gets a mellékelt kulccsal társított objektumot, nulla másképp
- put (karakterlánc-kulcs, objektum értéke) - beszúr vagy helyettesít egy kulcs-érték párost az áramban JSONObject.
A put () A módszer egy túlterhelt módszer, amely elfogad egy típusú kulcsot Húr és az érték több típusát.
A támogatott módszerek teljes listájához JSONObject, látogassa meg a hivatalos dokumentációt.
Beszéljünk most az osztály által támogatott főbb műveletekről.
4.1. JSON létrehozása közvetlenül innen JSONObject
JSONObject a Java-hoz hasonló API-t tesz ki Térkép felület. Használhatjuk a put () metódus és argumentumként adja meg a kulcsot és az értéket:
JSONObject jo = új JSONObject (); jo.put ("név", "jon doe"); jo.put ("kor", "22"); jo.put ("város", "chicago");
Most a mi JSONObject a következőképpen nézne ki:
{"város": "chicago", "név": "jon doe", "kor": "22"}
Hét különböző túlterhelt aláírás létezik JSONObject.put () módszer. Míg a kulcs csak egyedi lehet, nem null Húr, az érték bármi lehet.
4.2. JSON létrehozása a Térképből
Ahelyett, hogy a kulcsot és értékeket közvetlenül a JSONObject, létrehozhatunk egy szokást Térkép majd érvként továbbadják JSONObject’S kivitelezője.
Ez a példa a fentiekkel megegyező eredményeket hoz:
Térképtérkép = új HashMap (); map.put ("név", "jon doe"); map.put ("kor", "22"); map.put ("város", "chicago"); JSONObject jo = új JSONObject (térkép);
4.3. Teremtés JSONObject a JSON-tól Húr
Egy JSON elemzése Húr a JSONObject, csak átadhatjuk a Húr a kivitelezőnek.
Ez a példa a fentiekkel megegyező eredményeket hoz:
JSONObject jo = new JSONObject ("{\" város \ ": \" chicago \ ", \" név \ ": \" jon doe \ ", \" age \ ": \" 22 \ "}");
Az eltelt Húr argumentumnak érvényes JSON-nak kell lennie, különben ez a konstruktor dobhat egy JSONException.
4.4. Serializálja a Java objektumot a JSON-ra
Az egyik JSONObject 's a kivitelezők a POJO-t veszik fel érvként. Az alábbi példában a csomag a DemoBean osztály és létrehoz egy megfelelőt JSONObject ugyanazért.
Ahhoz, hogy a JSONObject Java objektumról egy érvényes Java Bean osztályt kell használnunk:
DemoBean demo = új DemoBean (); demo.setId (1); demo.setName ("lorem ipsum"); demo.setActive (true); JSONObject jo = új JSONObject (bemutató);
A JSONObject jo ez a példa a következő lesz:
{"name": "lorem ipsum", "active": true, "id": 1}
Bár van módunk Java-objektumot JSON karakterláncra sorosítani, a könyvtár használatával nem lehet visszaállítani.
Ha ilyen rugalmasságot akarunk, átválthatunk más könyvtárakra, például Jacksonra.
5. JSONArray
A JSONArray egy rendezett értékgyűjtemény, amely hasonlít a Java őshonos nyelvéhez Vektor végrehajtás.
- Az értékek bármi lehetnek a Szám, Húr, Logikai, JSONArray, JSONObject vagy akár a JSONObject.NULL tárgy
- Képviseli a Húr szögletes zárójelbe foglalva vesszővel elválasztott értékek gyűjteményéből áll
- Mint JSONObject, van egy konstruktora, amely elfogad egy forrást Húr és elemzi a konstrukcióhoz a JSONArray
A következők az elsődleges módszerek JSONArray osztály:
- get (int index) - rmegadja az értéket a megadott indexnél (0 és teljes hossz között - 1), különben a JSONException
- opt (int index) - egy indexhez társított értéket ad vissza (0 és teljes hossz között - 1). Ha az adott indexnél nincs érték, akkor a nulla visszatér
- put (objektum értéke) - ehhez hozzáfűz egy objektumértéket JSONArray. Ez a módszer túlterhelt és sokféle adattípust támogat
A JSONArray által támogatott módszerek teljes listáját a hivatalos dokumentációban találja.
5.1. Teremtés JSONArray
Miután inicializáltuk a JSONArray objektumot, egyszerűen hozzáadhatunk és beolvashatunk elemeket a put () és kap() mód:
JSONArray ja = új JSONArray (); ja.put (Boolean.TRUE); ja.put ("lorem ipsum"); JSONObject jo = új JSONObject (); jo.put ("név", "jon doe"); jo.put ("kor", "22"); jo.put ("város", "chicago"); ja.put (jo);
A követés a tartalmunk JSONArray(a kód az áttekinthetőség érdekében van formázva):
[igaz, "lorem ipsum", {"city": "chicago", "name": "jon doe", "age": "22"}]
5.2. Teremtés JSONArray Közvetlenül a JSON String-től
Mint JSONObject a JSONArray van egy konstruktora is, amely Java objektumot hoz létre közvetlenül egy JSON-ból Húr:
JSONArray ja = new JSONArray ("[igaz, \" lorem ipsum \ ", 215]");
Ez a kivitelező dobhat a JSONException ha a forrás Húr nem érvényes JSON Húr.
5.3. Teremtés JSONArray Közvetlenül egy gyűjteményből vagy egy tömbből
A kivitelező JSONArray argumentumként támogatja a gyűjtési és tömb objektumokat is.
Egyszerűen továbbadjuk őket argumentumként a konstruktornak, és ez a-t adja vissza JSONArray tárgy:
Lista lista = new ArrayList (); list.add ("Kalifornia"); list.add ("Texas"); list.add ("Hawaii"); list.add ("Alaszka"); JSONArray ja = új JSONArray (lista);
Most a mi JSONArray tartalmaz:
["Kalifornia", "Texas", "Hawaii", "Alaszka"]
6. JSONTokener
A JSONTokener forrást vesz Húr mint konstruktor bemenete, és kivonja belőle a karaktereket és a tokent. A csomag osztályai belsőleg használják (például JSONObject, JSONArray) a JSON elemzéséhez Húrok.
Előfordulhat, hogy nem sok olyan helyzet van, amikor közvetlenül ezt az osztályt fogjuk használni, mivel ugyanaz a funkcionalitás más egyszerűbb módszerekkel (például string.toCharArray ()):
JSONTokener jt = új JSONTokener ("lorem"); while (jt.more ()) {Log.info (jt.next ()); }
Most hozzáférhetünk a JSONTokener mint egy iterátor, a több() módszer annak ellenőrzésére, hogy van-e még megmaradt elem, és következő() a következő elem eléréséhez.
Az előző példából kapott tokenek a következők lesznek:
l o r e m
7. CDL
CDL-t kaptunk (Vesszővel elválasztott lista) osztály a vesszővel elválasztott szöveg a JSONArray és fordítva.
7.1. Termelő JSONArray Közvetlenül a vesszővel elválasztott szövegből
Annak érdekében, hogy a JSONArray közvetlenül a vesszővel tagolt szövegből használhatjuk a statikus módszert rowToJSONArray () amely elfogadja a JSONTokener:
JSONArray ja = CDL.rowToJSONArray (új JSONTokener ("Anglia, USA, Kanada"));
A mi JSONArray most a következőkből áll:
["Anglia", "USA", "Kanada"]
7.2. Vesszővel elválasztott szöveg előállítása a JSONArray alkalmazásból
Az előző lépés visszafordítása és a vesszővel elválasztott szöveg visszaszerzése JSONArray, tudjuk használni:
JSONArray ja = new JSONArray ("[\" Anglia \ ", \" USA \ ", \" Kanada \ "]"); Karakterlánc cdt = CDL.rowToString (ja);
A Húrcdt most tartalmazza:
Anglia, USA, Kanada
7.3. Termelő JSONArray nak,-nek JSONObjects Vesszővel elválasztott szöveg használata
Előállítani a JSONArray nak,-nek JSONObjects, használunk egy szöveget Húr a fejléceket és az adatokat vesszővel elválasztva.
A különféle vonalakat szekér-visszavonással választják el egymástól (\ r) vagy sortáp (\ n).
Az első sort fejlécekként értelmezzük, és az összes következő sort adatként kezeljük:
Karakterlánc = "név, város, kor \ n" + "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; JSONArray eredmény = CDL.toJSONArray (karakterlánc);
A tárgy JSONArray eredmény most a következőkből áll (a kimenet az áttekinthetőség érdekében formázva):
[{"név": "john", "város": "chicago", "kor": "22"}, {"név": "gary", "város": "florida", "kor": "35 "}, {" name ":" sal "," city ":" vegas "," age ":" 18 "}]
Vegye figyelembe, hogy ebben a példában mind az adatok, mind a fejléc ugyanazon belül került megadásra Húr.Ennek alternatív módja van, ahol ugyanazt a funkcionalitást érhetjük el a JSONArray amelyet felhasználnának a fejlécek és vesszővel elválasztva Húr adatként működik.
A különféle vonalakat szekér-visszatéréssel választják el egymástól (\ r) vagy sortáp (\ n):
JSONArray ja = új JSONArray (); ja.put ("név"); ja.put ("város"); ja.put ("kor"); Karakterlánc = "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; JSONArray eredmény = CDL.toJSONArray (ja, string);
Itt megkapjuk az objektum tartalmát eredmény pontosan úgy, mint korábban.
8. Cookie
A Aprósütemény osztály webböngésző cookie-kkal foglalkozik, és rendelkezik módszerekkel a böngésző cookie-jának a JSONObject és fordítva.
Itt vannak a Aprósütemény osztály:
- toJsonObject (String sourceCookie) - konvertál egy süti karakterláncot a-vá JSONObject
- toString (JSONObject jo) - ez ellentétes az előző módszerrel, konvertálja a JSONObject sütibe Húr.
8.1. Cookie átalakítása Húr ba be JSONObject
A cookie konvertálásához Húr a JSONObject, jól használja a statikus módszert Cookie.toJSONObject ():
String cookie = "felhasználónév = John Doe; lejár = csütörtök, 2013. december 18., 12:00:00 UTC; path = /"; JSONObject cookieJO = Cookie.toJSONObject (cookie);
8.2. Konvertálás a JSONObject a Cookie-ba Húr
Most átváltjuk a JSONObject sütibe Húr. Ez ellentétes az előző lépéssel:
String cookie = Cookie.toString (cookieJO);
9. HTTP
A HTTP osztály olyan statikus módszereket tartalmaz, amelyek a HTTP fejlécek konvertálására szolgálnak JSONObject és fordítva.
Ennek az osztálynak két fő módszere is van:
- toJsonObject (String sourceHttpHeader) - megtérít a HttpHeader karakterlánc nak nek JSONObject
- toString (JSONObject jo) - átalakítja a szállítottat JSONObject nak nek Húr
9.1. Konvertálás JSONObject a HTTP fejlécre
HTTP.toString () metódust használnak a JSONObject a HTTP fejlécre Húr:
JSONObject jo = új JSONObject (); jo.put ("Módszer", "POST"); jo.put ("Request-URI", "//www.example.com/"); jo.put ("HTTP-verzió", "HTTP / 1.1"); Karakterlánc: httpStr = HTTP.toString (jo);
Itt, a mi Karakterlánc httpStr a következőkből áll:
POST "//www.example.com/" HTTP / 1.1
Vegye figyelembe, hogy a HTTP kérés fejléc konvertálása közben a JSONObject tartalmaznia kell "Módszer",„Request-URI” és „HTTP-verzió” kulcsokat, míg a válasz fejlécéhez az objektumnak tartalmaznia kell „HTTP-verzió”,„Állapotkód” és „Ok-kifejezés” paraméterek.
9.2. A HTTP fejléc konvertálása Húr Vissza a JSONObject
Itt az előző lépésben kapott HTTP karakterláncot konvertáljuk vissza a nagyon JSONObject amit ebben a lépésben hoztunk létre:
JSONObject obj = HTTP.toJSONObject ("POST \" // www.example.com/ \ "HTTP / 1.1");
10. JSONException
A JSONException a szabványos kivétel, amelyet a csomag dob, ha bármilyen hiba lép fel.
Ezt a csomag minden osztályában használják. A kivételt általában egy üzenet követi, amely kimondja, hogy mi is hibázott pontosan.
11. Következtetés
Ebben az oktatóanyagban egy JSON-t néztünk meg Java használatával - org.json - és az itt elérhető néhány alapvető funkcióra összpontosítottunk.
A cikkben használt teljes kódrészletek a GitHub oldalon találhatók.