0


多层嵌套JSON找出指定key对应值

背景
需要从一个不确定的JSON中找出一个指定key对应的值,返回一个Map<String,Object>。
注意点
因为不确定有几层json嵌套,需要递归解析,只到解析成一个对象值 或者找到了指定key。

具体代码实现举例:
本次只写了Int类型,其他类型类似
我全部写在测试类中,可直接运行测试:

package xxx.xxx.xxx(自己类路径);
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.*;

public class TestJson {
    public static void main(String[] args) {
        //json格式的String字段
        String json = "{\"josnOne\":{\"number\":\"101\",\"Demo2\":{\"label\":\"test1\",\"key\":\"customerCode1\"},\"projectName\":\"测试manage\"},\"JsonTwo\":{\"Demo2\":{\"label\":\"张淑娜\",\"key\":\"10007319622\",\"number1\":\"102\"},\"A\":\"A\",\"Phone\":\"13466666666\"}}";
           //String 转为Json
        JSONObject jsonObject = JSONObject.parseObject(json);
        //要查找的key,例如number、number1
        List<String> list = Arrays.asList("number","number1");
        //查询到的值 Map<key,key对应的值>
        Map<String, Object> result = new HashMap<>();
        ParsingJson(jsonObject,list,result);
        System.out.println(result);

    }
     /**
     * 获取指定key对应value值
     * @param content json对象
     * @param conditionKey 要查找的key
     * @param result 输出map
     */
    public static void  ParsingJson(JSONObject content,List<String> conditionKey ,Map<String, Object> result) {

        Set<String> keySet = content.keySet();

        conditionKey.forEach(conkey -> {
            keySet.forEach(key -> {
                Object contentKey = content.get(key);

                //如果是一个对象
                if (contentKey instanceof JSONObject) {
                    JSONObject jsonObject = (JSONObject) contentKey;
                    //判断是否存在key
                    Integer keyValue = jsonObject.getInteger(conkey);
                    if(Objects.nonNull(keyValue)){
                        //赋值map
                        result.put(conkey,keyValue);
                        //递归
                    }else {
                        ParsingJson(jsonObject,Arrays.asList(conkey),result);
                    }

                    //如果是一个值
                } else if (contentKey instanceof JSONArray) {
                    JSONArray jsonArray = (JSONArray) contentKey;
                    //判断当前是否找到key
                    if(key.equals(conkey)){
                        Integer keyValue = Integer.valueOf(jsonArray.toJSONString());
                        //赋值map
                        result.put(conkey,keyValue);
                    }

                }

            });
        });
    }
}

看一下运行结果

在这里插入图片描述

标签: json java

本文转载自: https://blog.csdn.net/qq_35364656/article/details/124806303
版权归原作者 小白小白点 所有, 如有侵权,请联系我们删除。

“多层嵌套JSON找出指定key对应值”的评论:

还没有评论