fastjson判断JSONObject和JSONArray类型循环双层对象获取数据
【摘要】 fastjson判断JSONObject和JSONArray类型循环双层对象获取数据 1.概述在一个复杂的JSON对象中准确的拿到我们要的数据需要掌握下面的技能,这篇文章介绍如何掌握这些技能,在JSON复杂的格式中轻松拿到数据。1.正确解析复杂的JSON格式2.判断当前的JSON格式是JSONObject和JSONArray类型3.在JSONObject和JSONArray之间互相切换 2...
fastjson判断JSONObject和JSONArray类型循环双层对象获取数据
1.概述
在一个复杂的JSON对象中准确的拿到我们要的数据需要掌握下面的技能,这篇文章介绍如何掌握这些技能,在JSON复杂的格式中轻松拿到数据。
- 1.正确解析复杂的JSON格式
- 2.判断当前的JSON格式是JSONObject和JSONArray类型
- 3.在JSONObject和JSONArray之间互相切换
2.复杂JSON例子
JSON对象中第一层是一个data数组,第二层有JSONObject和JSONArray类型,在JSONArray类型里面是JSONObject
{
"code":0,
//第一层
"data":[
//第二层
{
"action":null,
"id":1,
"pid":0,
"sort":1
},
{
"action":[
//第三层
{
"action":null,
"icon":"",
"id":2,
"pid":0,
"sort":1
},
{
"children":null,
"icon":null,
"id":3,
"pid":0,
"sort":2
}
]
}
]
}
3.任务目标
遍历JSON对象取出所有的id值,添加到数组中。
难点分析:
- json第二层action既有JSONObject还有JSONArray类型需要判断出类型,在JSONArray中拿到所有的id
- 双层数组循环,需要在JSON中切换JSONObject和JSONArray类型获取数据
3.1.脚本
脚本处理JSON对象使用的是fastjson包,需要提前下载并上传到项目中。
导入方式阅读《上传jar包方法》
//导入fastjson
import com.alibaba.fastjson.*;
import java.util.Collections;
public static void getValue(){
//获取接口返回的数据
String response_data = prev.getResponseDataAsString();
//将数据转换成java可以处理的对象 JSONObject类型
JSONObject data_obj= JSON.parseObject(response_data);
if (data_obj.get("data").equals(null)){
log.info("接口返回数据列表为空");
} else{
//将JSONObject 转换为JSONArray 类型获取数组数据
JSONArray data_array = data_obj.getJSONArray("data");
int len = data_array.size();
ArrayList ids = new ArrayList();
for(int i=0;i<len;i++){
//遍历第一层数组,用JSONObject类型接收取出的对象数据
JSONObject jsonData = JSON.parseObject(data_array.get(i).toString());
//从每个对象中获取id,添加到List集合
ids.add(jsonData.get("id"));
// log.info("测试jsonData========" + jsonData.get("id"));
//取出第二层对象数据
Object jaChildren = jsonData.get("action");
//判断第二层对象数据类型,如果是JSONArray类型,则遍历数组取出id
if(jaChildren instanceof JSONArray){
int count = jaChildren.size();
//遍历第二层JSONArray类型数据,取出id
for(int j=0;j<count;j++){
String childrenId = jaChildren.get(j).get("id").toString();
//第二层数据添加到List集合
ids.add(childrenId);
// log.info("测试childrenId========" +ids);
}
log.info("JSONArray========");
}else if (jaChildren instanceof JSONObject){
log.info("JSONObject========");
}
}
vars.putObject("menuIds",ids);
log.info("测试ids========" + ids);
}
}
getValue();
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)