Android解析多层json数据并用递归进行查找

Android解析多层json数据并用递归进行查找

采用Gson进行json字符串的解析,然后利用递归进行特定数据的查找。


需要处理的数据

首先,需要处理的json长这样

 {
	"code":10,
	"data":[
		{
			"children":[
				{
					"children":[
						{
							"children":[],
							"id":"21",
							"name":"分公司21",
							"type":2,
							"wechatId":21
						},
						{
							"children":[
								{
									"children":[
										{
											"children":[
												{
													"children":[],
													"id":"31",
													"name":"分公司门店31",
													"type":3,
													"wechatId":31
												}
											],
											"id":"22",
											"name":"分公司22",
											"type":2,
											"wechatId":22
										},
										{
											"children":[],
											"id":"32",
											"name":"分公司门店32",
											"type":3,
											"wechatId":32
										}
									],
									"id":"23",
									"name":"分公司23",
									"type":2,
									"wechatId":23
								}
							],
							"id":"24",
							"name":"分公司24",
							"type":2,
							"wechatId":24
						},
						{
							"children":[
								{
									"children":[],
									"id":"33",
									"name":"分公司门店33",
									"type":3,
									"wechatId":33
								},
								{
									"children":[],
									"id":"34",
									"name":"分公司门店34",
									"type":3,
									"wechatId":34
								}
							],
							"id":"25",
							"name":"分公司25",
							"type":2,
							"wechatId":25
						},
						{
							"children":[
								{
									"children":[],
									"id":"35",
									"name":"分公司门店35",
									"type":3,
									"wechatId":35
								}
							],
							"id":"26",
							"name":"分公司26",
							"type":2,
							"wechatId":26
						},
						{
							"children":[],
							"id":"36",
							"name":"分公司门店36",
							"type":3,
							"wechatId":36
						},
						{
							"children":[],
							"id":"37",
							"name":"分公司门店37",
							"type":3,
							"wechatId":37
						},
						{
							"children":[],
							"id":"38",
							"name":"分公司门店38",
							"type":3,
							"wechatId":38
						}
					],
					"id":"27",
					"name":"分公司27",
					"type":2,
					"wechatId":27
				},
				{
					"children":[],
					"id":"28",
					"name":"分公司28",
					"type":2,
					"wechatId":28
				},
				{
					"children":[],
					"id":"29",
					"name":"分公司29",
					"type":2,
					"wechatId":29
				},
				{
					"children":[
						{
							"children":[],
							"id":"39",
							"name":"分公司门店39",
							"type":3,
							"wechatId":39
						}
					],
					"id":"210",
					"name":"分公司210",
					"type":2,
					"wechatId":210
				},
				{
					"children":[],
					"id":"211",
					"name":"分公司211",
					"type":2,
					"wechatId":211
				},
				{
					"children":[
						{
							"children":[
								{
									"children":[],
									"id":"212",
									"name":"分公司212",
									"type":2,
									"wechatId":212
								}
							],
							"id":"213",
							"name":"分公司213",
							"type":2,
							"wechatId":213
						},
						{
							"children":[],
							"id":"310",
							"name":"分公司门店310",
							"type":3,
							"wechatId":310
						},
						{
							"children":[],
							"id":"311",
							"name":"分公司门店311",
							"type":3,
							"wechatId":311
						}
					],
					"id":"214",
					"name":"分公司214",
					"type":2,
					"wechatId":214
				},
				{
					"children":[
						{
							"children":[],
							"id":"312",
							"name":"分公司门店312",
							"type":3,
							"wechatId":312
						}
					],
					"id":"215",
					"name":"分公司215",
					"type":2,
					"wechatId":215
				},
				{
					"children":[],
					"id":"216",
					"name":"分公司216",
					"type":2,
					"wechatId":216
				},
				{
					"children":[],
					"id":"217",
					"name":"分公司217",
					"type":2,
					"wechatId":217
				},
				{
					"children":[
						{
							"children":[],
							"id":"313",
							"name":"分公司门店313",
							"type":3,
							"wechatId":313
						}
					],
					"id":"218",
					"name":"分公司218",
					"type":2,
					"wechatId":218
				},
				{
					"children":[],
					"id":"219",
					"name":"分公司219",
					"type":2,
					"wechatId":219
				},
				{
					"children":[],
					"id":"220",
					"name":"分公司220",
					"type":2,
					"wechatId":220
				},
				{
					"children":[],
					"id":"221",
					"name":"分公司221",
					"type":2,
					"wechatId":221
				},
				{
					"children":[
						{
							"children":[
								{
									"children":[
										{
											"children":[
												{
													"children":[],
													"id":"314",
													"name":"分公司门店314",
													"type":3,
													"wechatId":314
												}
											],
											"id":"222",
											"name":"分公司222",
											"type":2,
											"wechatId":222
										}
									],
									"id":"223",
									"name":"分公司223",
									"type":2,
									"wechatId":223
								}
							],
							"id":"224",
							"name":"分公司224",
							"type":2,
							"wechatId":224
						},
						{
							"children":[],
							"id":"315",
							"name":"分公司门店315",
							"type":3,
							"wechatId":315
						},
						{
							"children":[],
							"id":"316",
							"name":"分公司门店316",
							"type":3,
							"wechatId":151
						}
					],
					"id":"225",
					"name":"分公司225",
					"type":2,
					"wechatId":225
				},
				{
					"children":[
						{
							"children":[],
							"id":"317",
							"name":"分公司门店317",
							"type":3,
							"wechatId":317
						}
					],
					"id":"226",
					"name":"分公司226",
					"type":2,
					"wechatId":226
				},
				{
					"children":[],
					"id":"227",
					"name":"分公司227",
					"type":2,
					"wechatId":227
				},
				{
					"children":[
						{
							"children":[],
							"id":"318",
							"name":"分公司门店318",
							"type":3,
							"wechatId":318
						}
					],
					"id":"228",
					"name":"分公司228",
					"type":2,
					"wechatId":228
				},
				{
					"children":[
						{
							"children":[],
							"id":"319",
							"name":"分公司门店319",
							"type":3,
							"wechatId":319
						},
						{
							"children":[],
							"id":"320",
							"name":"分公司门店320",
							"type":3,
							"wechatId":320
						},
						{
							"children":[],
							"id":"321",
							"name":"分公司门店321",
							"type":3,
							"wechatId":321
						}
					],
					"id":"229",
					"name":"分公司229",
					"type":2,
					"wechatId":229
				},
				{
					"children":[],
					"id":"230",
					"name":"分公司230",
					"type":2,
					"wechatId":230
				},
				{
					"children":[],
					"id":"322",
					"name":"分公司门店322",
					"type":3,
					"wechatId":322
				}
			],
			"id":"11",
			"name":"总公司",
			"type":1,
			"wechatId":11
		}
	],
	"msg":"请求成功"
}

主要数据里面有三种类型,分别是总公司、分公司、分公司下的门店,它们以type分类,type=1为总公司,type=2为分公司,type=3为分公司门店,对这段数据的处理要求是,获取所有的分公司门店的“name”和“id”并一一对应,至于总公司和分公司不作处理。

使用Gson进行处理

创建ChildBean类,代码如下

public class ChildBean {

    private String id;
    private String name;
    private String type;
    private String wechId;
    private List<ChildBean> children;

    @Override
    public String toString() {
        return "ChildBean{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", wechId='" + wechId + '\'' +
                ", children=" + children +
                '}';
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getWechId() {
        return wechId;
    }

    public void setWechId(String wechId) {
        this.wechId = wechId;
    }

    public List<ChildBean> getChildren() {
        return children;
    }

    public void setChildren(List<ChildBean> children) {
        this.children = children;
    }
}

准备工作

首先定义几个集合

private HashMap<String, String> mendian = new HashMap<>();
private List<ChildBean> listjson = new ArrayList<>();

获取到json字符串

String strJsonData = response.body().string();//response为网络获取到的json字符串

需要处理的数据在“data[ ]”里面,所以和“data”同级的“code”、"msg"等不处理,获取“data”里面的数据就行了。

JsonObject jsonObject = new JsonParser().parse(strJsonData).getAsJsonObject();
JsonArray jsonArray = jsonObject.getAsJsonArray("data");

接下来将JsonArray数组里面的数据放到listjson里面,然后对listjson里面的数据进行操作

 Gson gson = new Gson();
 listjson = gson.fromJson(jsonArray, new TypeToken<List<ChildBean>>(){}.getType());
 //写一个getJsonData()方法
 getJsonData();

数据查找

getJsonData()方法的实现,采用递归的方式查找实现,获取到所有type为3,分公司门店name和id对应的数据

private void getJsonData() {
        List<ChildBean> temp;
        for (ChildBean mBean : listjson) {
            if (mBean.getType().equals(String.valueOf(3))) {
                String name = mBean.getName();
                String id = mBean.getId();
                mendian.put(name, id);
            }
            if (mBean.getChildren() != null) {
                temp = new ArrayList<>();
                List<ChildBean> childBeanss = mBean.getChildren();
                for (ChildBean nBean : childBeanss) {
                    temp.add(nBean);
                    if (nBean.getType().equals(String.valueOf(3))) {
                        String name = nBean.getName();
                        String id = nBean.getId();
                        mendian.put(name, id);
                    }
                }
                listjson = temp;
                getJsonData();
            }
        }
    }
    //注意两个if里面的一个是mBean,一个是nBean,不一样

获取的部分数据形式为

//{name=id,name=id,name=id,......}
{分公司门店31=31,分公司门店32=32,分公司门店33=33,分公司门店34=34......}

接下来就可以对数据进行其他的操作了,同理获取其他数据也是类似的。


总结

主要使用了Gson解析json字符串,然后面对多层嵌套的json数据,采用了递归的查找方式。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值