fastjson判断JSONObject和JSONArray类型循环双层对象获取数据

举报
brucexiaogui 发表于 2021/11/25 15:26:46 2021/11/25
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。