最近遇到了Java解析json串的事情,做了一点总结。为了方便,就直接使用了json工具。
首先要分析字符串的固定格式,例如下面代码中的例子,最外面是一个key值为“page”的json对象,它的值是一个json数组,数组中每个json对象又包含了几个key值。
针对这个串最外面只有一个json对象,就使用:
JSONObject jsonObject = new JSONObject(json);
初始化成一个json对象,然后通过已知的key获取到它的值,即json数组:
JSONArray array = jsonObject.getJSONArray("page");
一般情况下,这个数组是一个动态的,这也是我们选择使用json的原因。
针对一个json对象有多个key,但是又不确定其名字的,通过如下方法获取:
Iteratoriterator = array.getJSONObject(i).keys(); while(iterator.hasNext()){ String key = iterator.next(); System.out.println(key + ":" +array.getJSONObject(i).get(key)); }
下面是一个完整的实例:
import org.json.JSONArray;import org.json.JSONObject;import java.util.Iterator;public static void main(String[] args) throws ParseException{ String json = "{'page': " +"[" +"{" +"'id': '100001'," +"'create_time': '2013-07-12 10:00:00'," +"'create_by': 'system'" +"}," +"{" +"'id': '100002'," +"'create_time': '2013-07-13 11:00:00'," +"'create_by': 'sync....'" +"}" +"]" +"}"; JSONObject jsonObject = new JSONObject(json); JSONArray array = jsonObject.getJSONArray("page"); for(int i=0,iLen=array.length();iiterator = array.getJSONObject(i).keys(); while(iterator.hasNext()){ String key = iterator.next(); System.out.println(key + ":" +array.getJSONObject(i).get(key)); } }}
输出结果:
create_time:2013-07-12 10:00:00
create_by:system
id:100001
create_time:2013-07-13 11:00:00
create_by:sync....
id:100002