从文件读入树状jsonArray数据,并遍历

用到处理json的jar包:

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

一、线性表状的json数组遍历:
如果你的数据不存在某个key对应的value是数组,以下代码即可遍历整个json数组:

Iterator it = ja.iterator(); 
while (it.hasNext()){ 
    JSONObject ob = (JSONObject) it.next(); 
}

二、树状的json数组的遍历。
先给大家看一下我的json数据。


[
  {
    "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"
  }
  ]

1、首先从文件中读取数据

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数组格式

2、用JSONArray包里面封装的iterator函数对json数组遍历,注意它并不是调用一下就可以全部遍历了,他只会把这个数组的第一维遍历,如果把json数组比作一个森林的话,他遍历的只是这个森林的每棵树的第一个节点。 例如我上面的数据中,他只会遍历Grandpa和Nancy。所以要加一个递归函数。

Iterator it= jsonArray.iterator();
iterJsonArr(it,0);//递归函数

3、递归函数。


    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数据处理方式欢迎交流学习!!!嘿嘿嘿

你可能感兴趣的:(java,遍历json,递归)