This chapter covers the way to encode and decode JSON objects using the use of Java programming language. Let's begin with preparing the environment to start our programming with Java for JSON.
Before you begin with encoding and decoding JSON using Java, you need to install any of the JSON modules available. For this tutorial we've downloaded and installed JSON.easy and have introduced the location of json-simple-1.1.1.jar file to the environment variable CLASSPATH.
JSON.simple maps entities from the left aspect to the right side while interpreting or parsing, and maps entities from the right to the left while encoding.
JSON | Java |
string | java.lang.String |
number | java.lang.Number |
true'false | java.lang.Boolean |
null | null |
array | java.util.List |
object | java.util.Map |
On decoding, the default concrete class of java.util.List is org.json.simple.JSONArray and the default concrete class of java.util.Map is org.json.simple.JSONObject.
Following is an easy instance to encode a JSON object using Java JSONObject which is a subclass of java.util.HashMap. No ordering is provided. If you want the strict ordering of elements, use JSONValue.toJSONString ( map ) method with ordered map implementation along with java.util.LinkedHashMap.
import org.json.simple.JSONObject; class JsonEncodeDemo { public static void main(String[] args) { JSONObject obj = new JSONObject() obj.put("name", "foo"); obj.put("num", new Integer(100)); obj.put("balance", new Double(1000.21)); obj.put("is_vip", new Boolean(true)); System.out.print(obj); } }
On assembling and implementing the above-given program the below-given result will be produced:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
Now, there is one other example that represents a JSON object streaming by making use of Java JSONObject:
import org.json.simple.JSONObject; class JsonEncodeDemo { public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("name","foo"); obj.put("num",new Integer(100)); obj.put("balance",new Double(1000.21)); obj.put("is_vip",new Boolean(true)); StringWriter out = new StringWriter(); obj.writeJSONString(out); String jsonText = out.toString(); System.out.print(jsonText); } }
On assembling and implementing the above-given program, the below-given result is produced:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
Decoding JSON in Java
The following instance makes use of JSONObject and JSONArray in which JSONObject is a java.util.Map and JSONArray is a java.util.List, so that you can access them with preferred operations of Map or List.
import org.json.simple.JSONObject; import org.json.simple.JSONArray; import org.json.simple.parser.ParseException; import org.json.simple.parser.JSONParser; class JsonDecodeDemo { public static void main(String[] args) { JSONParser parser = new JSONParser(); String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]"; try{ Object obj = parser.parse(s); JSONArray array = (JSONArray)obj; System.out.println("The 2nd element of array"); System.out.println(array.get(1)); System.out.println(); JSONObject obj2 = (JSONObject)array.get(1); System.out.println("Field \"1\""); System.out.println(obj2.get("1")); s = "{}"; obj = parser.parse(s); System.out.println(obj); s = "[5,]"; obj = parser.parse(s); System.out.println(obj); s = "[5,,2]"; obj = parser.parse(s); System.out.println(obj); }catch(ParseException pe) { System.out.println("position: " + pe.getPosition()); System.out.println(pe); } } }
On assembling and implementing the above-given program, the below-given result will be produced:
The 2nd element of array {"1":{"2":{"3":{"4":[5,{"6":7}]}}}} Field "1" {"2":{"3":{"4":[5,{"6":7}]}}} {} [5] [5,2]