從文件讀入樹狀jsonArray數據,並遍歷

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

相關文章
相關標籤/搜索