递归算法-获取json中指定key的所有值

今天在工作中遇到要解析json并获取json里所有指定key的值,再把key的值插入对应的数据映射表。于是写了一个递归算法来取值。

1.首先导入alibaba的fastjson,用来解析json。当然也可以用其他的解析包

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

2.创建两个工具类方法,用来判断传入的是不是json对象或json数组

public static boolean isJSONObj(Object json){
   return json instanceof JSONObject;
}
public static boolean isJSONArray(Object json){
   return json instanceof JSONArray;
}

java中的instanceof也称为类型比较运算符,因为它将实例与类型进行比较。它返回true或false。

3.建立核心多态方法

    public static void getJSONValue(JSONObject json,String k,List<String> list){
        for (Object j:json.keySet()){
            if(isJSONObj(json.get(j))){
                //是对象
                JSONObject j2= JSON.parseObject(json.get(j).toString());
                getJSONValue(j2,k,list);
            }else if(isJSONArray(json.get(j))){
                JSONArray j3=JSON.parseArray(json.get(j).toString());
                //是数组
                getJSONValue(j3,k,list);
            }else if(j==k){
                //是字符串
                list.add(json.get(j).toString());
            }
        }
    }

    public static void getJSONValue(JSONArray json,String k,List<String> list){
        for (Object j:json){
            if(isJSONObj(j)){
                //是对象
                JSONObject j2= JSON.parseObject(j.toString());
                getJSONValue(j2,k,list);
            }else if(isJSONArray(j)){
                //是数组
                JSONArray j3=JSON.parseArray(j.toString());
                getJSONValue(j3,k,list);
            }
        }
    }

4.接下来写一个比较复杂的json,里面有对象嵌套数组的,数组嵌套对象的,数组嵌套数组的

点击查看json

5.调用方法

try {
    File file=new File(demo1.class.getResource("/2.json").getPath());
    FileInputStream fileInputStream=new FileInputStream(file);
    InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream);
    BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
    String line="";
    StringBuffer json=new StringBuffer();
    while ((line=bufferedReader.readLine())!=null){
        json.append(line);
    }

    JSONObject j3=JSON.parseObject(json.toString());
    List<String> mid=new ArrayList<>();
    getJSONValue(j3,"interfaceId",mid);
    System.out.println(mid.toString());
}catch (Exception e){
    System.out.println(e.getMessage());
}

6.成功获取

2.png

demo源码地址:https://github.com/z573419235/studyDemo
个人博客地址: https://mjava.top

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,818评论 1 32
  • JSON的特点: 1、JSON比XML的数据传递的有效性高;2、JSON完全独立于编程语言;3、JSON的本质是具...
    程序员之路阅读 3,877评论 0 3
  • 前言: 最近也是期末了,有好多好多文档和实验报告要交,所以都没啥时间写文,这段时间清闲了,来补一下之前学习时遗漏的...
    我没有三颗心脏阅读 3,321评论 0 12
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,983评论 0 3
  • JSON的特点: JSON数据格式(JSON对象、JSON数组): 1、JSON对象:{ } 结构:{key1:v...
    gogoingmonkey阅读 2,520评论 0 5

友情链接更多精彩内容