这个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() 这样就可以了。