美文网首页Java 杂谈java
递归算法-获取json中指定key的所有值

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

作者: 灰灰H_K | 来源:发表于2019-08-26 11:42 被阅读0次

    今天在工作中遇到要解析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

    相关文章

      网友评论

        本文标题:递归算法-获取json中指定key的所有值

        本文链接:https://www.haomeiwen.com/subject/vndrectx.html