Inleiding tot JSON-Java (org.json)

1. Inleiding tot JSON-Java

JSON (een afkorting voor JavaScript Object Notation) is een lichtgewicht formaat voor gegevensuitwisseling en is meestal gebruikt voor client-server-communicatie. Het is zowel gemakkelijk te lezen / schrijven als taalonafhankelijk. Een JSON-waarde kan een andere JSON zijn object, matrix, getal, tekenreeks, booleaans (waar / onwaar) of nul.

In deze tutorial zullen we zien hoe we JSON kunnen maken, manipuleren en parseren met behulp van een van de beschikbare JSON-verwerkingsbibliotheken, d.w.z. JSON-Java-bibliotheek is ook bekend als org.json.

2. Vereiste

Voordat we beginnen, moeten we de volgende afhankelijkheid toevoegen aan onze pom.xml:

 org.json json 20180130 

De nieuwste versie is te vinden in de Maven Central-repository.

Merk op dat dit pakket al is opgenomen in Android SDK, dus we moeten het niet opnemen tijdens het gebruik ervan.

3. JSON in Java [pakket org.json]

De JSON-Java-bibliotheek wordt ook wel org.json (niet te verwarren met org.json.simple van Google) biedt ons klassen die worden gebruikt om JSON in Java te parseren en te manipuleren.

Bovendien kan deze bibliotheek ook converteren tussen JSON, XML, HTTP-headers, cookies, door komma's gescheiden lijst of tekst, enz.

In deze tutorial zullen we kijken naar:

  1. JSONObject - vergelijkbaar met Java's native Kaart like-object dat ongeordende sleutel / waarde-paren opslaat
  2. JSONArray - een geordende reeks waarden vergelijkbaar met Java's native Vector-implementatie
  3. JSONTokener - een tool die een stuk tekst opsplitst in een reeks Munten die kan worden gebruikt door JSONObject of JSONArray om JSON-strings te parseren
  4. CDL - een tool die methoden biedt om door komma's gescheiden tekst om te zetten in een JSONArray en vice versa
  5. Koekje - converteert van JSON Draad op cookies en vice versa
  6. HTTP - gebruikt om te converteren van JSON Draad naar HTTP-headers en vice versa
  7. JSONException - dit is een standaarduitzondering die door deze bibliotheek wordt gegenereerd

4. JSONObject

EEN JSONObject is een ongeordende verzameling sleutel- en waardeparen, die lijkt op Java's native Kaart implementaties.

  • Sleutels zijn uniek Snaren dat kan niet nul
  • Waarden kunnen van alles zijn, van a Boolean, Aantal, Draad, JSONArray of zelfs een JSONObject.NULL voorwerp
  • EEN JSONObject kan worden weergegeven door een Draad tussen accolades met sleutels en waarden gescheiden door een dubbele punt, en paren gescheiden door een komma
  • Het heeft verschillende constructeurs om een JSONObject

Het ondersteunt ook de volgende hoofdmethoden:

  1. get (String-toets) - gets het object dat is gekoppeld aan de geleverde sleutel, gooit JSONException als de sleutel niet wordt gevonden
  2. opt (String-sleutel) - gets het object dat is gekoppeld aan de geleverde sleutel, nul anders-
  3. put (String key, Object value) - voegt een sleutel / waarde-paar in of vervangt deze in current JSONObject.

De leggen() methode is een overbelaste methode die een sleutel van het type accepteert Draad en meerdere typen voor de waarde.

Voor de volledige lijst met methoden die worden ondersteund door JSONObject, bezoek de officiële documentatie.

Laten we nu enkele van de belangrijkste bewerkingen bespreken die door deze klasse worden ondersteund.

4.1. JSON rechtstreeks maken van JSONObject

JSONObject stelt een API bloot die lijkt op die van Java Kaart koppel. We kunnen de leggen() methode en geef de sleutel en waarde als argument:

JSONObject jo = nieuw JSONObject (); jo.put ("naam", "jon doe"); jo.put ("leeftijd", "22"); jo.put ("stad", "chicago");

Nu onze JSONObject zou eruit zien als:

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

Er zijn zeven verschillende overbelaste handtekeningen van JSONObject.put () methode. Hoewel de sleutel alleen uniek kan zijn, niet nul Draad, de waarde kan van alles zijn.

4.2. JSON maken op basis van kaart

In plaats van sleutel en waarden direct in een JSONObjectkunnen we een maatwerk maken Kaart en geef het dan als argument door aan JSONObject‘S constructor.

Dit voorbeeld levert dezelfde resultaten op als hierboven:

Map map = nieuwe HashMap (); map.put ("naam", "jon doe"); map.put ("leeftijd", "22"); map.put ("stad", "chicago"); JSONObject jo = nieuw JSONObject (kaart);

4.3. Creëren JSONObject van JSON Draad

Om een ​​JSON Draad naar een JSONObject, kunnen we gewoon de Draad aan de constructeur.

Dit voorbeeld levert dezelfde resultaten op als hierboven:

JSONObject jo = nieuw JSONObject ("{\" stad \ ": \" chicago \ ", \" naam \ ": \" jon doe \ ", \" leeftijd \ ": \" 22 \ "}");

Het is voorbij Draad argument moet een geldige JSON zijn, anders kan deze constructor een JSONException.

4.4. Serialiseer Java-object naar JSON

Een van de JSONObject 's constructeurs neemt een POJO als argument. In het onderstaande voorbeeld gebruikt het pakket de getters van de DemoBean klasse en creëert een passend JSONObject voor het zelfde.

Om een JSONObject van een Java-object, moeten we een klasse gebruiken die een geldige Java Bean is:

DemoBean demo = nieuwe DemoBean (); demo.setId (1); demo.setName ("lorem ipsum"); demo.setActive (true); JSONObject jo = nieuw JSONObject (demo);

De JSONObject jo want dit voorbeeld wordt:

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

Hoewel we een manier hebben om een ​​Java-object te serialiseren naar JSON-string, is er geen manier om het terug te converteren met deze bibliotheek.

Als we dat soort flexibiliteit willen, kunnen we overschakelen naar andere bibliotheken zoals Jackson.

5. JSONArray

EEN JSONArray is een geordende verzameling waarden, die lijkt op Java's native Vector implementatie.

  • Waarden kunnen van alles zijn, van a Aantal, Draad, Boolean, JSONArray, JSONObject of zelfs een JSONObject.NULL voorwerp
  • Het wordt vertegenwoordigd door een Draad verpakt tussen vierkante haken en bestaat uit een verzameling waarden gescheiden door komma's
  • Leuk vinden JSONObject, het heeft een constructor die een bron accepteert Draad en parseert het om een JSONArray

De volgende zijn de belangrijkste methoden van de JSONArray klasse:

  1. get (int index) - returns de waarde op de gespecificeerde index (tussen 0 en totale lengte - 1), anders gooit een JSONException
  2. opt (int index) - geeft de waarde terug die is gekoppeld aan een index (tussen 0 en totale lengte - 1). Als er geen waarde bij die index staat, dan is een nul wordt geretourneerd
  3. put (waarde van het object) - voeg hier een objectwaarde aan toe JSONArray. Deze methode is overbelast en ondersteunt een breed scala aan gegevenstypen

Bezoek de officiële documentatie voor een volledige lijst met methoden die worden ondersteund door JSONArray.

5.1. Creëren JSONArray

Nadat we een JSONArray-object hebben geïnitialiseerd, kunnen we eenvoudig elementen toevoegen en ophalen met de leggen() en krijgen() methoden:

JSONArray ja = nieuwe JSONArray (); ja.put (Boolean.TRUE); ja.put ("lorem ipsum"); JSONObject jo = nieuw JSONObject (); jo.put ("naam", "jon doe"); jo.put ("leeftijd", "22"); jo.put ("stad", "chicago"); ja.put (jo);

Het volgende zou de inhoud zijn van ons JSONArray(code is voor de duidelijkheid opgemaakt):

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

5.2. Creëren JSONArray Direct vanuit JSON String

Leuk vinden JSONObject de JSONArray heeft ook een constructor die rechtstreeks vanuit een JSON een Java-object maakt Draad:

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

Deze constructor kan een JSONException als de bron Draad is geen geldige JSON Draad.

5.3. Creëren JSONArray Direct uit een verzameling of een array

De constructeur van JSONArray ondersteunt ook collectie- en matrixobjecten als argumenten.

We geven ze gewoon door als argument aan de constructor en het zal een JSONArray voorwerp:

Lijstlijst = nieuwe ArrayList (); list.add ("Californië"); list.add ("Texas"); list.add ("Hawaii"); list.add ("Alaska"); JSONArray ja = nieuwe JSONArray (lijst);

Nu onze JSONArray bestaat uit:

["California", "Texas", "Hawaii", "Alaska"]

6. JSONTokener

EEN JSONTokener neemt een bron Draad als invoer voor zijn constructor en extraheert er karakters en tokens uit. Het wordt intern gebruikt door klassen van dit pakket (zoals JSONObject, JSONArray) om JSON te parseren Snaren.

Er zijn misschien niet veel situaties waarin we deze klasse direct zullen gebruiken, omdat dezelfde functionaliteit kan worden bereikt met andere eenvoudigere methoden (zoals string.toCharArray ()):

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

Nu hebben we toegang tot een JSONTokener als een iterator, met behulp van de meer() methode om te controleren of er nog elementen zijn en De volgende() om toegang te krijgen tot het volgende element.

De tokens die uit het vorige voorbeeld zijn ontvangen, zijn:

l o r e m

7. CDL

We zijn voorzien van een CDL (Door komma's gescheiden lijst) class om door komma's gescheiden tekst om te zetten in een JSONArray en vice versa.

7.1. Produceren JSONArray Rechtstreeks vanuit door komma's gescheiden tekst

Om een JSONArray rechtstreeks vanuit de door komma's gescheiden tekst kunnen we de statische methode gebruiken rowToJSONArray () die accepteert een JSONTokener:

JSONArray ja = CDL.rowToJSONArray (nieuwe JSONTokener ("Engeland, VS, Canada"));

Onze JSONArray bestaat nu uit:

["Engeland", "VS", "Canada"]

7.2. Door komma's gescheiden tekst produceren vanuit JSONArray

Om de vorige stap om te keren en de door komma's gescheiden tekst terug te krijgen van JSONArray, we kunnen gebruiken:

JSONArray ja = nieuwe JSONArray ("[\" Engeland \ ", \" VS \ ", \" Canada \ "]"); String cdt = CDL.rowToString (ja);

De Draadcdt bevat nu:

Engeland, VS, Canada

7.3. Produceren JSONArray van JSONObjects Gebruik van door komma's gescheiden tekst

Om een JSONArray van JSONObjects, we gebruiken een tekst Draad met zowel kopteksten als gegevens gescheiden door komma's.

De verschillende regels worden gescheiden met een regelterugloop (\ r) of lijntoevoer (\ n).

De eerste regel wordt geïnterpreteerd als een lijst met kopteksten en alle volgende regels worden als gegevens behandeld:

String string = "naam, stad, leeftijd \ n" + "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; JSONArray-resultaat = CDL.toJSONArray (string);

Het object JSONArray-resultaat bestaat nu uit (uitvoer voor de duidelijkheid geformatteerd):

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

Merk op dat in dit voorbeeld zowel de gegevens als de koptekst binnen hetzelfde zijn geleverd Draad.Er is een alternatieve manier om dit te doen waarbij we dezelfde functionaliteit kunnen bereiken door een JSONArray dat zou worden gebruikt om de kopteksten en een door komma's gescheiden te krijgen Draad werken als de gegevens.

Verschillende regels worden gescheiden met een regelterugloop (\ r) of lijntoevoer (\ n):

JSONArray ja = nieuwe JSONArray (); ja.put ("naam"); ja.put ("stad"); ja.put ("leeftijd"); String string = "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; JSONArray-resultaat = CDL.toJSONArray (ja, string);

Hier krijgen we de inhoud van het object resultaat precies zoals voorheen.

8. Koekje

De Koekje class behandelt webbrowser-cookies en heeft methoden om een ​​browsercookie om te zetten in een JSONObject en vice versa.

Hier zijn de belangrijkste methoden van de Koekje klasse:

  1. toJsonObject (String sourceCookie) - converteert een cookie-string naar een JSONObject

  2. toString (JSONObject jo) - dit is het omgekeerde van de vorige methode, converteert een JSONObject in een koekje Draad.

8.1. Een cookie omzetten Draad in een JSONObject

Om een ​​cookie te converteren Draad naar een JSONObject, gebruik dan de statische methode Cookie.toJSONObject ():

String cookie = "gebruikersnaam = John Doe; expires = do 18 dec 2013 12:00:00 UTC; path = /"; JSONObject cookieJO = Cookie.toJSONObject (cookie);

8.2. Omzetten van een JSONObject in Cookie Draad

Nu zullen we een JSONObject in koekje Draad. Dit is het omgekeerde van de vorige stap:

String cookie = Cookie.toString (cookieJO);

9. HTTP

De HTTP class bevat statische methoden die worden gebruikt om HTTP-headers naar JSONObject en vice versa.

Deze klasse heeft ook twee hoofdmethoden:

  1. toJsonObject (String sourceHttpHeader) - converteert een HttpHeader-tekenreeks naar JSONObject
  2. toString (JSONObject jo) - converteert de meegeleverde JSONObject naar Draad

9.1. Omzetten JSONObject naar HTTP-header

HTTP.toString () methode wordt gebruikt om een JSONObject naar HTTP-header Draad:

JSONObject jo = nieuw JSONObject (); jo.put ("Methode", "POST"); jo.put ("Request-URI", "//www.example.com/"); jo.put ("HTTP-versie", "HTTP / 1.1"); String httpStr = HTTP.toString (jo);

Hier, onze Tekenreeks httpStr zal bestaan ​​uit:

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

Merk op dat tijdens het converteren van een HTTP-verzoekheader de JSONObject moet bevatten "Methode","Request-URI" en "HTTP-versie" sleutels, terwijl het object voor de antwoordheader "HTTP-versie","Status code" en "Reden-zin" parameters.

9.2. HTTP-header converteren Draad Terug naar JSONObject

Hier zullen we de HTTP-string die we in de vorige stap hebben gekregen terug converteren naar de zeer JSONObject die we in die stap hebben gemaakt:

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

10. JSONException

De JSONException is de standaarduitzondering die door dit pakket wordt gegenereerd wanneer er een fout optreedt.

Dit wordt in alle klassen van dit pakket gebruikt. De uitzondering wordt meestal gevolgd door een bericht waarin staat wat er precies mis is gegaan.

11. Conclusie

In deze tutorial hebben we gekeken naar een JSON met Java - org.json - en we hebben ons geconcentreerd op enkele van de kernfunctionaliteit die hier beschikbaar is.

De volledige codefragmenten die in dit artikel worden gebruikt, zijn te vinden op GitHub.


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