使用GSON解析一个复杂的json

这个json结构如下:


主要是解析这个wdnodes,它是一个json数组,其中每个元素(以下称为wdnode)由三部分组成,nodes、wdcode、wdname,其中nodes又是一个数组。展开看的话就是下面这样:


然后,我们要解析它,需要先读取到“根json字符串”——wdnodesString,然后转成jsonArray,然后遍历里面每个元素,对于每个元素,也就是每个wdnode再取出其中的每个节点:nodes、wdcode、wdname分别处理,nodes就要再嵌套一层循环了。代码如下:

String responseBody = bodyBuffer.toString();
String wdnodesString = responseBody.substring(responseBody
		.indexOf("wdnodes") + 9, responseBody.trim().length() - 2);
System.out.println("wdnodes: " + wdnodesString);

System.out.println("\n\n---------------------解析开始!---------------------\n");
		
JsonArray wdnodes = JsonUtil.json2JsonArray(wdnodesString);

int cntWdNode = 0, cntNode = 0;

for (JsonElement wdnode : wdnodes) {
	System.out.println("这是第 " + cntWdNode + " 号wdNode:");
	cntWdNode++;
	// 将每个wdnode转换为jsonObject
	JsonObject wdnodeJSObject = wdnode.getAsJsonObject();
	// 将nodes节点下的内容转为JsonArray,并解析
	System.out.println("\tnodes中数据如下:");
	JsonArray nodes = wdnodeJSObject.getAsJsonArray("nodes");
	cntNode = 0;
	for (JsonElement node : nodes) {
		// 将每个node转换为jsonObject
		JsonObject nodeJSObject = node.getAsJsonObject();
		System.out.println("\t\t第 " + cntNode + " 号node:"
				+ nodeJSObject.toString());
		cntNode++;
	}
	// wdcode节点下的内容是个字符串,将其解析
	System.out.println("\twdcode中数据如下:" + wdnodeJSObject.get("wdcode").getAsString());
	// wdname节点下的内容是个字符串,将其解析
	System.out.println("\twdname中数据如下:" + wdnodeJSObject.get("wdname").getAsString());
}
System.out.println("---------------------解析完毕!---------------------");

结果打印出来差不多是这样(截图是结尾一段,第二个wdnode):


总结来看,处理一个jsonElement的基本步骤是(注意以下使用的是gson包提供的各种类而非json包里的):

1、如果要读这个element的子内容或者它本身是个数组,那就用 .getAsJsonObject() 转为jsonObject,然后该取内容值取内容值,该转array转array。

2、如果当前这个element本身就是想解析的内容,比如字符串,那就是 element.getAsString() 这样就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值