树形json数据不同于一般的json数据,其大多有多层嵌套。如果用Android Studio中的GsonFormat或者其他工具往往不能正确生成数据格式。
//树形json不知多少个children
[
{
"name": "a",
"size": "4",
"Rate": "4",
"level": "3",
"children": [
{
"name": "aa",
"size": "8",
"Rate": "8",
"level": "4",
"children": [
{
"name": "aaa",
"size": "8",
"Rate": "8",
"level": "5"
}
]
}
]
},
{
"name": "b",
"size": "4",
"Rate": "4",
"level": "3",
"children": [
{
"name": "bb",
"size": "8",
"Rate": "8",
"level": "4",
"children": [
{
"name": "bbb",
"size": "8",
"Rate": "8",
"level": "5"
}
]
}
]
}
]
正确的解析方法:
1、建立JavaBean
public class Bean{
private String name;
private String size;
private String Rate;
private String level;
private List<Bean> children;
...
get/set方法
}
2、创建一个List,用来存放最终数据
List<Bean> mDatas = new ArrayList<>();
3、利用fastjson或者Gson解析json数据
List<Bean> list = JSON.parseArray(responseData, Bean.class); //其中responseData是转化为String的json数据
4、对list进行递归遍历,判断是否有children节点,把每一个children节点遍历出来放到mDatas中
private void getFromListBean(List<Bean> list) {
List<Bean> temp;
for(Bean mBean:list){
mDatas2.add(mBean);
if(mBean.getChildren()!=null){
temp=new ArrayList<>();
List<Bean> children=mBean.getChildren();
for(Bean nBean:children){
temp.add(nBean);
}
getFromListBean(temp);
}
}
}
这样最后的mDatas存放的就是解析出来的数据。
这种数形结构多见于组织架构,多层目录这种情况。