Introduktion til JSON-Java (org.json)

1. Introduktion til JSON-Java

JSON (et akronym for JavaScript Object Notation) er et letvægtsformat til dataudveksling og er mest brugt til klient-server kommunikation. Det er både let at læse / skrive og sproguafhængigt. En JSON-værdi kan være en anden JSON objekt, matrix, nummer, streng, boolsk (sand / falsk) eller nul.

I denne vejledning ser vi, hvordan vi kan oprette, manipulere og analysere JSON ved hjælp af et af de tilgængelige JSON-behandlingsbiblioteker, dvs. JSON-Java-bibliotek er også kendt som org.json.

2. Forudbestemmelse

Før vi kommer i gang, skal vi tilføje følgende afhængighed i vores pom.xml:

 org.json json 20180130 

Den seneste version kan findes i Maven Central repository.

Bemærk, at denne pakke allerede er inkluderet i Android SDK, så vi bør ikke medtage den, mens vi bruger den samme.

3. JSON i Java [pakke org.json]

JSON-Java-biblioteket er også kendt som org.json (ikke at forveksle med Googles org.json.simple) giver os klasser, der bruges til at analysere og manipulere JSON i Java.

Desuden kan dette bibliotek også konvertere mellem JSON, XML, HTTP-headere, cookies, komma-afgrænset liste eller tekst osv.

I denne vejledning ser vi på:

  1. JSONObjekt - svarende til Java's native Kort som objekt, der gemmer uordnede nøgleværdipar
  2. JSONArray - en ordnet rækkefølge af værdier svarende til Java's native Vector-implementering
  3. JSONTokener - et værktøj, der opdeler et stykke tekst i en række tokens som kan bruges af JSONObjekt eller JSONArray for at analysere JSON-strenge
  4. CDL - et værktøj, der giver metoder til at konvertere komma-afgrænset tekst til en JSONArray og omvendt
  5. Cookie - konverterer fra JSON Snor til cookies og omvendt
  6. HTTP - bruges til at konvertere fra JSON Snor til HTTP-overskrifter og omvendt
  7. JSONE undtagelse - dette er en standard undtagelse fra dette bibliotek

4. JSONObjekt

EN JSONObjekt er en uordnet samling af nøgle- og værdipar, der ligner Java's oprindelige Kort implementeringer.

  • Tasterne er unikke Strenge det kan ikke være nul
  • Værdier kan være alt fra en Boolsk, Nummer, Snor, JSONArray eller endda en JSONObject.NULL objekt
  • EN JSONObjekt kan repræsenteres af en Snor omsluttet af krøllede seler med nøgler og værdier adskilt af et kolon og par adskilt af et komma
  • Den har flere konstruktører, som man kan konstruere en JSONObjekt

Det understøtter også følgende hovedmetoder:

  1. get (String key) - gkaster det objekt, der er knyttet til den medfølgende nøgle JSONE undtagelse hvis nøglen ikke findes
  2. opt (strengnøgle) - get objektet, der er knyttet til den medfølgende nøgle, nul Ellers
  3. put (strengnøgle, objektværdi) - indsætter eller erstatter et nøgleværdipar i det aktuelle JSONObjekt.

Det sætte() metode er en overbelastet metode, der accepterer en nøgle af typen Snor og flere typer for værdien.

For den komplette liste over metoder, der understøttes af JSONObjekt, besøg den officielle dokumentation.

Lad os nu diskutere nogle af de vigtigste operationer, der understøttes af denne klasse.

4.1. Oprettelse af JSON direkte fra JSONObject

JSONObjekt afslører en API svarende til Java Kort interface. Vi kan bruge sætte() metode og lever nøglen og værdien som et argument:

JSONObject jo = ny JSONObject (); jo.put ("navn", "jon doe"); jo.put ("alder", "22"); jo.put ("by", "chicago");

Nu vores JSONObjekt ville se ud som:

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

Der er syv forskellige overbelastede underskrifter af JSONObject.put () metode. Mens nøglen kun kan være unik, ikke-nul Snor, værdien kan være hvad som helst.

4.2. Oprettelse af JSON fra Map

I stedet for direkte at lægge nøgler og værdier i JSONObject, kan vi konstruere en brugerdefineret Kort og send det derefter som et argument til JSONObject'S konstruktør.

Dette eksempel giver de samme resultater som ovenfor:

Kortkort = nyt HashMap (); map.put ("navn", "jon doe"); map.put ("alder", "22"); map.put ("by", "chicago"); JSONObject jo = nyt JSONObject (kort);

4.3. Opretter JSONObjekt fra JSON Snor

At analysere en JSON Snor til en JSONObjekt, vi kan bare passere Snor til konstruktøren.

Dette eksempel giver de samme resultater som ovenfor:

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

Den bestod Snor argumentet skal være en gyldig JSON, ellers kan denne konstruktør kaste et JSONE undtagelse.

4.4. Serialiser Java-objekt til JSON

En af JSONObjekt 's konstruktører tager en POJO som argument. I eksemplet nedenfor bruger pakken getters fra DemoBean klasse og skaber en passende JSONObject for det samme.

For at få en JSONObject fra et Java-objekt skal vi bruge en klasse, der er en gyldig Java Bean:

DemoBean demo = ny DemoBean (); demo.setId (1); demo.setName ("lorem ipsum"); demo.setActive (sand); JSONObject jo = ny JSONObject (demo);

Det JSONObject jo for dette eksempel vil være:

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

Selvom vi har en måde at serieisere et Java-objekt til JSON-streng, er der ingen måde at konvertere det tilbage ved hjælp af dette bibliotek.

Hvis vi ønsker den slags fleksibilitet, kan vi skifte til andre biblioteker som Jackson.

5. JSONArray

EN JSONArray er en ordnet samling af værdier, der ligner Java's oprindelige Vektor implementering.

  • Værdier kan være alt fra en Nummer, Snor, Boolsk, JSONArray, JSONObjekt eller endda en JSONObject.NULL objekt
  • Det er repræsenteret af en Snor indpakket i firkantede parenteser og består af en samling værdier adskilt af kommaer
  • Synes godt om JSONObject, den har en konstruktør, der accepterer en kilde Snor og analyserer den for at konstruere en JSONArray

Følgende er de primære metoder til JSONArray klasse:

  1. get (int index) - returerer værdien ved det angivne indeks (mellem 0 og total længde - 1), ellers kaster a JSONE undtagelse
  2. opt (int-indeks) - returnerer den værdi, der er knyttet til et indeks (mellem 0 og total længde - 1). Hvis der ikke er nogen værdi ved dette indeks, så er a nul returneres
  3. put (Objektværdi) - tilføj en objektværdi til dette JSONArray. Denne metode er overbelastet og understøtter en bred vifte af datatyper

For en komplet liste over metoder, der understøttes af JSONArray, skal du besøge den officielle dokumentation.

5.1. Opretter JSONArray

Når vi har initialiseret et JSONArray-objekt, kan vi blot tilføje og hente elementer ved hjælp af sætte() og få() metoder:

JSONArray ja = ny JSONArray (); ja.put (boolsk.TRUE); ja.put ("lorem ipsum"); JSONObject jo = ny JSONObject (); jo.put ("navn", "jon doe"); jo.put ("alder", "22"); jo.put ("by", "chicago"); ja.put (jo);

Følgende ville være indholdet af vores JSONArray(kode er formateret for klarhedens skyld):

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

5.2. Opretter JSONArray Direkte fra JSON String

Synes godt om JSONObjekt det JSONArray har også en konstruktør, der opretter et Java-objekt direkte fra en JSON Snor:

JSONArray ja = ny JSONArray ("[sand, \" lorem ipsum \ ", 215]");

Denne konstruktør kan kaste en JSONE undtagelse hvis kilden Snor er ikke en gyldig JSON Snor.

5.3. Opretter JSONArray Direkte fra en samling eller en matrix

Konstruktøren af JSONArray understøtter også indsamlings- og matrixobjekter som argumenter.

Vi sender dem simpelthen som et argument til konstruktøren, og det vil returnere a JSONArray objekt:

Liste liste = ny ArrayList (); list.add ("Californien"); list.add ("Texas"); list.add ("Hawaii"); list.add ("Alaska"); JSONArray ja = ny JSONArray (liste);

Nu vores JSONArray består af:

["Californien", "Texas", "Hawaii", "Alaska"]

6. JSONTokener

EN JSONTokener tager en kilde Snor som input til sin konstruktør og udtrækker tegn og tokens fra den. Det bruges internt af klasser i denne pakke (som f.eks JSONObjekt, JSONArray) for at analysere JSON Strenge.

Der er muligvis ikke mange situationer, hvor vi direkte bruger denne klasse, da den samme funktionalitet kan opnås ved hjælp af andre enklere metoder (som f.eks string.toCharArray ()):

JSONTokener jt = ny JSONTokener ("lorem"); mens (jt.more ()) {Log.info (jt.next ()); }

Nu kan vi få adgang til en JSONTokener som en iterator ved hjælp af mere() metode til at kontrollere, om der er resterende elementer og Næste() for at få adgang til det næste element.

De tokens, der er modtaget fra det foregående eksempel, er:

l o r e m

7. CDL

Vi får en CDL (Kommasepareret liste) klasse for at konvertere kommasepareret tekst til en JSONArray og omvendt.

7.1. Producerer JSONArray Direkte fra kommasepareret tekst

For at producere en JSONArray direkte fra den kommaseparerede tekst kan vi bruge den statiske metode rækkeToJSONArray () som accepterer en JSONTokener:

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

Vores JSONArray består nu af:

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

7.2. Producerer komma-afgrænset tekst fra JSONArray

For at vende om fra det forrige trin og komme tilbage den kommaseparerede tekst fra JSONArray, kan vi bruge:

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

Det Snorcdt indeholder nu:

England, USA, Canada

7.3. Producerer JSONArray af JSONObjekts Brug af kommasepareret tekst

At producere en JSONArray af JSONObjects, vi bruger en tekst Snor indeholder både overskrifter og data adskilt med kommaer.

De forskellige linjer adskilles ved hjælp af en vognretur (\ r) eller linjefoder (\ n).

Den første linje fortolkes som en liste med overskrifter, og alle de efterfølgende linjer behandles som data:

Strengstreng = "navn, by, alder \ n" + "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; JSONArray resultat = CDL.toJSONArray (streng);

Objektet JSON Array-resultat består nu af (output formateret for klarhedens skyld):

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

Bemærk, at i dette eksempel blev både data og header leveret inden for det samme Snor.Der er en alternativ måde at gøre dette på, hvor vi kan opnå den samme funktionalitet ved at levere en JSONArray der ville blive brugt til at få overskrifterne og en kommasepareret Snor fungerer som data.

Forskellige linjer adskilles ved hjælp af en vognretur (\ r) eller linjefoder (\ n):

JSONArray ja = ny JSONArray (); ja.put ("navn"); ja.put ("by"); ja.put ("alder"); Strengstreng = "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; JSONArray-resultat = CDL.toJSONArray (ja, streng);

Her får vi indholdet af objektet resultat nøjagtigt som før.

8. Cookie

Det Cookie klasse beskæftiger sig med webbrowser-cookies og har metoder til at konvertere en browsercookie til en JSONObjekt og omvendt.

Her er de vigtigste metoder til Cookie klasse:

  1. toJsonObject (String sourceCookie) - konverterer en cookiestreng til en JSONObjekt

  2. toString (JSONObject jo) - dette er omvendt fra den foregående metode, konverterer a JSONObject i en cookie Snor.

8.1. Konvertering af en cookie Snor ind i en JSONObjekt

At konvertere en cookie Snor til en JSONObject, brug godt den statiske metode Cookie.toJSONObject ():

String cookie = "brugernavn = John Doe; udløber = Tor, 18. december 2013 12:00:00 UTC; sti = /"; JSONObject cookieJO = Cookie.toJSONObject (cookie);

8.2. Konvertering af en JSONObjekt i Cookie Snor

Nu konverterer vi en JSONObject i cookie Snor. Dette er omvendt fra det foregående trin:

String cookie = Cookie.toString (cookieJO);

9. HTTP

Det HTTP klasse indeholder statiske metoder, der bruges til at konvertere HTTP-headere til JSONObjekt og omvendt.

Denne klasse har også to hovedmetoder:

  1. toJsonObject (String sourceHttpHeader) - konverterer en HttpHeader String til JSONObjekt
  2. toString (JSONObject jo) - konverterer det medfølgende JSONObjekt til Snor

9.1. Konvertering JSONObjekt til HTTP-header

HTTP.toString () metoden bruges til at konvertere en JSONObjekt til HTTP-overskrift Snor:

JSONObject jo = ny JSONObject (); jo.put ("Metode", "POST"); jo.put ("Request-URI", "//www.example.com/"); jo.put ("HTTP-version", "HTTP / 1.1"); Streng httpStr = HTTP.toString (jo);

Her, vores Streng httpStr vil bestå af:

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

Bemærk, at når du konverterer en HTTP-anmodningsoverskrift, JSONObjekt skal indeholde "Metode",“Request-URI” og “HTTP-version” nøgler, mens objektet skal indeholde for svarhoved “HTTP-version”,“Status-kode” og “Reason-Phrase” parametre.

9.2. Konvertering af HTTP-header Snor Tilbage til JSONObjekt

Her konverterer vi HTTP-strengen, som vi fik i det forrige trin tilbage til selve JSONObjekt som vi skabte i det trin:

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

10. JSONE undtagelse

Det JSONE undtagelse er standardundtagelsen fra denne pakke, når der opstår en fejl.

Dette bruges på tværs af alle klasser fra denne pakke. Undtagelsen følges normalt af en besked, der angiver, hvad der nøjagtigt gik galt.

11. Konklusion

I denne vejledning så vi på en JSON ved hjælp af Java - org.json - og vi fokuserede på nogle af de kernefunktioner, der er tilgængelige her.

De komplette kodestykker, der bruges i denne artikel, kan findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found