用处处理json的jar包:json
import net.sf.json.JSONArray; import net.sf.json.JSONObject;
1、线性表状的json数组遍历:
若是你的数据不存在某个key对应的value是数组,如下代码便可遍历整个json数组:数组
Iterator<Object> it = ja.iterator(); while (it.hasNext()){ JSONObject ob = (JSONObject) it.next(); }
2、树状的json数组的遍历。
先给你们看一下个人json数据。app
[ { "name": "Grandpa", "value": "20", "children": [ { "name": "Uncle Leo", "value": 15, "children": [ { "name": "Cousin Jack", "value": 2 }, { "name": "Cousin Mary", "value": 5, "children": [ { "name": "Jackson", "value": 2 } ] }, { "name": "Cousin Ben", "value": 4 } ] }, { "name": "Father", "value": 10, "children": [ { "name": "Me", "value": 5 }, { "name": "Brother Peter", "value": 1 } ] } ] }, { "name": "Nancy", "value": "15" } ]
一、首先从文件中读取数据函数
String jsonStr = null; try { File file = new File("path"); FileReader fileReader = new FileReader(file); Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8"); int ch = 0; StringBuffer sb = new StringBuffer(); while ((ch = reader.read()) != -1) { sb.append((char) ch); } fileReader.close(); reader.close(); jsonStr = sb.toString(); } catch (Exception e) { System.out.println("获取 json 文件出错 "); } JSONArray jsonArray = JSONArray.fromObject(jsonStr); //把读取到的数据存成json数组格式
二、用JSONArray包里面封装的iterator函数对json数组遍历,注意它并非调用一下就能够所有遍历了,他只会把这个数组的第一维遍历,若是把json数组比做一个森林的话,他遍历的只是这个森林的每棵树的第一个节点。 例如我上面的数据中,他只会遍历Grandpa和Nancy。因此要加一个递归函数。学习
Iterator it= jsonArray.iterator(); iterJsonArr(it,0);//递归函数
三、递归函数。code
public void iterJsonArr(Iterator it,Integer pid){ //递归遍历json数组 。 while (it.hasNext()){ JSONObject ob = (JSONObject) it.next(); if (ob.has("children")){//判断是否有孩子节点,若是有,就递归遍历 JSONArray jsonArray= (JSONArray) ob.get("children"); Iterator c_it= jsonArray.iterator(); iterJsonArr(c_it,tree.getId()); } } }
以上。若有不懂或有好的json数据处理方式欢迎交流学习!!!嘿嘿嘿递归