用處處理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數據處理方式歡迎交流學習!!!嘿嘿嘿遞歸