How to parse JSON in Java
Last Updated :
07 Aug, 2019
JSON (JavaScript Object Notation) is a lightweight, text-based, language-independent data exchange format that is easy for humans and machines to read and write. JSON can represent two structured types: objects and arrays. An object is an unordered collection of zero or more name/value pairs. An array is an ordered sequence of zero or more values. The values can be strings, numbers, booleans, null, and these two structured types.
Below is a simple example from Wikipedia that shows JSON representation of an object that describes a person. The object has string values for first name and last name, a number value for age, an object value representing the person’s address, and an array value of phone number objects.
{
"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 Processing in Java : The Java API for JSON Processing JSON.simple is a simple Java library that allow parse, generate, transform, and query JSON.
Getting Started : You need to download the json-simple-1.1 jar and put it in your CLASSPATH before compiling and running the below example codes.
Json-Simple API : It provides object models for JSON object and array structures. These JSON structures are represented as object models using types JSONObject and JSONArray. JSONObject provides a Map view to access the unordered collection of zero or more name/value pairs from the model. Similarly, JSONArray provides a List view to access the ordered sequence of zero or more values from the model.
Write JSON to a file
Let us see an example that writes above JSON data into a file “JSONExample.json”, with help of JSONObject and JSONArray.
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
{
JSONObject jo = new JSONObject();
jo.put( "firstName" , "John" );
jo.put( "lastName" , "Smith" );
jo.put( "age" , 25 );
Map m = new LinkedHashMap( 4 );
m.put( "streetAddress" , "21 2nd Street" );
m.put( "city" , "New York" );
m.put( "state" , "NY" );
m.put( "postalCode" , 10021 );
jo.put( "address" , m);
JSONArray ja = new JSONArray();
m = new LinkedHashMap( 2 );
m.put( "type" , "home" );
m.put( "number" , "212 555-1234" );
ja.add(m);
m = new LinkedHashMap( 2 );
m.put( "type" , "fax" );
m.put( "number" , "212 555-1234" );
ja.add(m);
jo.put( "phoneNumbers" , ja);
PrintWriter pw = new PrintWriter( "JSONExample.json" );
pw.write(jo.toJSONString());
pw.flush();
pw.close();
}
}
|
Output from file “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"
}
Note : In JSON, An object is an unordered set of name/value pairs, so JSONObject doesn’t preserve the order of an object’s name/value pairs, since it is (by definition) not significant. Hence in our output file, order is not preserved.
Read JSON from a file
Let us see an example that read JSON data from above created file “JSONExample.json” with help of JSONParser, JSONObject and JSONArray.
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
{
Object obj = new JSONParser().parse( new FileReader( "JSONExample.json" ));
JSONObject jo = (JSONObject) obj;
String firstName = (String) jo.get( "firstName" );
String lastName = (String) jo.get( "lastName" );
System.out.println(firstName);
System.out.println(lastName);
long age = ( long ) jo.get( "age" );
System.out.println(age);
Map address = ((Map)jo.get( "address" ));
Iterator<Map.Entry> itr1 = address.entrySet().iterator();
while (itr1.hasNext()) {
Map.Entry pair = itr1.next();
System.out.println(pair.getKey() + " : " + pair.getValue());
}
JSONArray ja = (JSONArray) jo.get( "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());
}
}
}
}
|
Output:
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
Share your thoughts in the comments
Please Login to comment...