用到处理json的jar包:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
一、线性表状的json数组遍历:
如果你的数据不存在某个key对应的value是数组,以下代码即可遍历整个json数组:
Iterator<Object> 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数据处理方式欢迎交流学习!!!嘿嘿嘿
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。