logo

Hur man tolkar JSON i Java

JSON (JavaScript Object Notation) är ett lätt, textbaserat, språkoberoende datautbytesformat som är lätt för människor och maskiner att läsa och skriva. JSON kan representera två strukturerade typer: objekt och arrayer. Ett objekt är en oordnad samling av noll eller fler namn/värdepar. En matris är en ordnad sekvens av noll eller fler värden. Värdena kan vara strängar, tal, booleaner, null och dessa två strukturerade typer.

Nedan finns ett enkelt exempel från Wikipedia som visar JSON-representation av ett objekt som beskriver en person. Objektet har strängvärden för förnamn och efternamn, ett nummervärde för ålder, ett objektvärde som representerar personens adress och ett matrisvärde för telefonnummerobjekt.



 { 'firstName': 'John', 'lastName': 'Smith', 'age': 25, 'address': { 'streetAddress': '21 2nd Street', 'city': 'New York', 'state': 'NY', 'postalCode': 10021 }, 'phoneNumbers': [ { 'type': 'home', 'number': '212 555-1234' }, { 'type': 'fax', 'number': '646 555-4567' } ] }>

JSON-bearbetning i Java: Java API för JSON-bearbetning JSON.simple är ett enkelt Java-bibliotek som tillåter att analysera, generera, transformera och fråga JSON.

Komma igång: Du måste ladda ner json-simple-1.1 jar och lägg den i din CLASSPATH innan du kompilerar och kör nedanstående exempelkoder.

Json-Simple API: Den tillhandahåller objektmodeller för JSON-objekt- och arraystrukturer. Dessa JSON-strukturer representeras som objektmodeller som använder typer JSONObject och JSONArray . JSONObject tillhandahåller en Karta vy för att komma åt den oordnade samlingen av noll eller fler namn/värdepar från modellen. På samma sätt tillhandahåller JSONArray en Lista vy för att komma åt den ordnade sekvensen med noll eller fler värden från modellen.



Skriv JSON till en fil

Låt oss se ett exempel som skriver ovan JSON-data till en fil JSONExample.json, med hjälp av JSONObject och JSONArray.






// Java program for write JSON to a file> > import> java.io.FileNotFoundException;> import> java.io.PrintWriter;> import> java.util.LinkedHashMap;> import> java.util.Map;> import> org.json.simple.JSONArray;> import> org.json.simple.JSONObject;> > public> class> JSONWriteExample> {> >public> static> void> main(String[] args)>throws> FileNotFoundException> >{> >// creating JSONObject> >JSONObject jo =>new> JSONObject();> > >// putting data to JSONObject> >jo.put(>'firstName'>,>'John'>);> >jo.put(>'lastName'>,>'Smith'>);> >jo.put(>'age'>,>25>);> > >// for address data, first create LinkedHashMap> >Map m =>new> LinkedHashMap(>4>);> >m.put(>'streetAddress'>,>'21 2nd Street'>);> >m.put(>'city'>,>'New York'>);> >m.put(>'state'>,>'NY'>);> >m.put(>'postalCode'>,>10021>);> > >// putting address to JSONObject> >jo.put(>'address'>, m);> > >// for phone numbers, first create JSONArray> >JSONArray ja =>new> JSONArray();> > >m =>new> LinkedHashMap(>2>);> >m.put(>'type'>,>'home'>);> >m.put(>'number'>,>'212 555-1234'>);> > >// adding map to list> >ja.add(m);> > >m =>new> LinkedHashMap(>2>);> >m.put(>'type'>,>'fax'>);> >m.put(>'number'>,>'212 555-1234'>);> > >// adding map to list> >ja.add(m);> > >// putting phoneNumbers to JSONObject> >jo.put(>'phoneNumbers'>, ja);> > >// writing JSON to file:'JSONExample.json' in cwd> >PrintWriter pw =>new> PrintWriter(>'JSONExample.json'>);> >pw.write(jo.toJSONString());> > >pw.flush();> >pw.close();> >}> }>

>

>

Utdata från filen JSONExample.json :

 { 'lastName':'Smith', 'address':{ 'streetAddress':'21 2nd Street', 'city':'New York', 'state':'NY', 'postalCode':10021 }, 'age':25, 'phoneNumbers':[ { 'type':'home', 'number':'212 555-1234' }, { 'type':'fax', 'number':'212 555-1234' } ], 'firstName':'John' }>

Notera : I JSON är ett objekt en oordnad uppsättning namn/värdepar, så JSONObject bevarar inte ordningen på ett objekts namn/värdepar, eftersom det (per definition) inte är signifikant. Därför bevaras inte ordningen i vår utdatafil.

Läs JSON från en fil

Låt oss se ett exempel som läser JSON-data från ovan skapade fil JSONExample.json med hjälp av JSONParser, JSONObject och JSONArray.

försök fånga i java




// Java program to read JSON from a file> > import> java.io.FileReader;> import> java.util.Iterator;> import> java.util.Map;> > import> org.json.simple.JSONArray;> import> org.json.simple.JSONObject;> import> org.json.simple.parser.*;> > public> class> JSONReadExample> {> >public> static> void> main(String[] args)>throws> Exception> >{> >// parsing file 'JSONExample.json'> >Object obj =>new> JSONParser().parse(>new> FileReader(>'JSONExample.json'>));> > >// typecasting obj to JSONObject> >JSONObject jo = (JSONObject) obj;> > >// getting firstName and lastName> >String firstName = (String) jo.get(>'firstName'>);> >String lastName = (String) jo.get(>'lastName'>);> > >System.out.println(firstName);> >System.out.println(lastName);> > >// getting age> >long> age = (>long>) jo.get(>'age'>);> >System.out.println(age);> > >// getting address> >Map address = ((Map)jo.get(>'address'>));> > >// iterating address Map> >Iterator itr1 = address.entrySet().iterator();> >while> (itr1.hasNext()) {> >Map.Entry pair = itr1.next();> >System.out.println(pair.getKey() +>' : '> + pair.getValue());> >}> > >// getting phoneNumbers> >JSONArray ja = (JSONArray) jo.get(>'phoneNumbers'>);> > >// iterating phoneNumbers> >Iterator itr2 = ja.iterator();> > >while> (itr2.hasNext())> >{> >itr1 = ((Map) itr2.next()).entrySet().iterator();> >while> (itr1.hasNext()) {> >Map.Entry pair = itr1.next();> >System.out.println(pair.getKey() +>' : '> + pair.getValue());> >}> >}> >}> }>

>

>

Produktion:

 John Smith 25 streetAddress : 21 2nd Street postalCode : 10021 state : NY city : New York number : 212 555-1234 type : home number : 212 555-1234 type : fax>