tag:blogger.com,1999:blog-55361290320169957902023-06-20T05:31:50.497-07:00Json to JavaConvert JSON String into Java Map or Java List. All you have to know is what is the top level JSON, is it an object or array. This class will take care of rest of the nesting.hemanthttp://www.blogger.com/profile/03138055766911251015noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-5536129032016995790.post-46834994578742365762008-12-11T09:35:00.000-08:002010-01-26T06:36:44.735-08:00Json to JavaConvert a JSON string into a Java Map or Java List.<br /><br />Make sure you have included all apache-commons, apache-logging, apache-discovery (and many other apache packaged required by json) and json-lib in your classpath<br /><br />This class also has a small main function at the bottom, that shows how to use this class.<br />(Excuse me for the bad formatting, I will figure out how to update this post with a proper formatting.)<br /><br /><pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"><code><br />import java.io.IOException;<br />import java.io.InputStreamReader;<br />import java.net.URL;<br />import java.net.URLConnection;<br />import java.util.ArrayList;<br />import java.util.HashMap;<br />import java.util.Iterator;<br />import java.util.List;<br />import java.util.Map;<br /><br />import net.sf.json.JSONArray;<br />import net.sf.json.JSONObject;<br /><br />/**<br />*formatting a JSON response into Map and List<br />*/<br />public class Json2Java {<br />private static final int TIMEOUT = 5000; // 5 seconds timeout<br /><br />//This is how you use it.<br /></code><code> public static void main(String a[]) throws Exception {<br /> Json2Java j = new Json2Java();<br /> String jsonStr = "{\"id\":101,\"person\":{\"fname\":\"foo\", \"lname\":\"bar\"}}";<br /> Map<String, Object> resp = j.getMap(jsonStr);<br /> System.out.println("Response message = " + ((Map)resp.get("person")).get("lname"));<br />}</code><br /><code><br />/**<br />* getList provides a List representation of the JSON Object<br />* @param jsonResponse The JSON array string<br />* @return List of JSONObject.<br />**/<br />protected List<Object> getList(String jsonResponse) throws Exception {<br /> List<Object> listResponse = new ArrayList<Object>();<br /> if (jsonResponse.startsWith("[")) {<br /> JSONArray jsonArray = JSONArray.fromObject(jsonResponse);<br /> toJavaList(jsonArray, listResponse);<br /> } else {<br /> throw new Exception("MalFormed JSON Array Response.");<br /> }<br /><br /> return listResponse;<br />}<br /><br />/**<br />* getMap provides a Map representation of the JSON Object<br />* @param jsonResponse The JSON object string<br />* @return Map of JSONObject.<br />**/<br />protected Map<String, Object> getMap(String jsonResponse ) throws Exception {<br /> Map<String, Object> mapResponse = new HashMap<String, Object>();<br /> if (jsonResponse.startsWith("{")) {<br /> JSONObject jsonObj = JSONObject.fromObject(jsonResponse);<br /> toJavaMap(jsonObj, mapResponse);<br /> } else {<br /> throw new Exception("MalFormed JSON Array Response.");<br /> }<br /> return mapResponse;<br />}<br /><br />/**<br />* toJavaMap converts the JSONObject into a Java Map<br />* @param o<br />* JSONObject to be converted to Java Map<br />* @param b<br />* Java Map to hold converted JSONObject response.<br />**/<br />private static void toJavaMap(JSONObject o, Map<String, Object> b) {<br /> Iterator ji = o.keys();<br /> while (ji.hasNext()) {<br /> String key = (String) ji.next();<br /> Object val = o.get(key);<br /> if (val.getClass() == JSONObject.class) {<br /> Map<String, Object> sub = new HashMap<String, Object>();<br /> toJavaMap((JSONObject) val, sub);<br /> b.put(key, sub);<br /> } else if (val.getClass() == JSONArray.class) {<br /> List<Object> l = new ArrayList<Object>();<br /> JSONArray arr = (JSONArray) val;<br /> for (int a = 0; a < arr.size(); a++) {<br /> Map<String, Object> sub = new HashMap<String, Object>();<br /> Object element = arr.get(a);<br /> if (element instanceof JSONObject) {<br /> toJavaMap((JSONObject) element, sub);<br /> l.add(sub);<br /> } else {<br /> l.add(element);<br /> }<br /> }<br /> b.put(key, l);<br /> } else {<br /> b.put(key, val);<br /> }<br /> }<br />}<br /><br />/**<br />* toJavaList converts JSON's array response into Java's List<br />* @param ar<br />* JSONArray to be converted to Java List<br />* @param ll<br />* Java List to hold the converted JSONArray response<br />**/<br />private static void toJavaList(JSONArray ar, List<Object> ll) {<br /> int i = 0;<br /> while (i < ar.size()) {<br /> Object val = ar.get(i);<br /> if (val.getClass() == JSONObject.class) {<br /> Map<String, Object> sub = new HashMap<String, Object>();<br /> toJavaMap((JSONObject) val, sub);<br /> ll.add(sub);<br /> } else if (val.getClass() == JSONArray.class) {<br /> List<Object> l = new ArrayList<Object>();<br /> JSONArray arr = (JSONArray) val;<br /> for (int a = 0; a < arr.size(); a++) {<br /> Map<String, Object> sub = new HashMap<String, Object>();<br /> Object element = arr.get(a);<br /> if (element instanceof JSONObject) {<br /> toJavaMap((JSONObject) element, sub);<br /> ll.add(sub);<br /> } else {<br /> ll.add(element);<br /> }<br /> }<br /> l.add(l);<br /> } else {<br /> ll.add(val);<br /> }<br /> i++;<br /> }<br />}<br />}<br /><br /><br /></code></pre><br /><!-- ======================================================== -->hemanthttp://www.blogger.com/profile/03138055766911251015noreply@blogger.com4