最近遇到了Java解析json串的事情,做了一点总结。为了方便,就直接使用了json工具。

  1. 首先要分析字符串的固定格式,例如下面代码中的例子,最外面是一个key值为“page”的json对象,它的值是一个json数组,数组中每个json对象又包含了几个key值。

  2. 针对这个串最外面只有一个json对象,就使用:

JSONObject jsonObject = new JSONObject(json);

   初始化成一个json对象,然后通过已知的key获取到它的值,即json数组:

JSONArray array = jsonObject.getJSONArray("page");

   一般情况下,这个数组是一个动态的,这也是我们选择使用json的原因。

   针对一个json对象有多个key,但是又不确定其名字的,通过如下方法获取:

Iterator
iterator = 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();i
iterator = 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