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:

  1. JSONObject - hasonló a Java anyanyelvéhez Térkép mint objektum, amely rendezetlen kulcs-érték párokat tárol
  2. JSONArray - a Java natív Vector megvalósításához hasonló sorrendű értéksor
  3. 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
  4. CDL - egy olyan eszköz, amely módszereket biztosít a vesszővel elválasztott szöveg a JSONArray és fordítva
  5. Aprósütemény - megtért a JSON-ból Húr sütikre és fordítva
  6. HTTP - a JSON-ból való konvertáláshoz használt Húr a HTTP fejlécekre és fordítva
  7. 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:

  1. get (karakterlánc-kulcs) - gets a mellékelt kulccsal társított objektum, dob JSONException ha a kulcs nem található
  2. opció (karakterlánc billentyű) - gets a mellékelt kulccsal társított objektumot, nulla másképp
  3. 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:

  1. get (int index) - rmegadja az értéket a megadott indexnél (0 és teljes hossz között - 1), különben a JSONException
  2. 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
  3. 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:

  1. toJsonObject (String sourceCookie) - konvertál egy süti karakterláncot a-vá JSONObject

  2. 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:

  1. toJsonObject (String sourceHttpHeader) - megtérít a HttpHeader karakterlánc nak nek JSONObject
  2. 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.