吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1055|回复: 6
收起左侧

[求助] 已完成

[复制链接]
战忽地狱猫 发表于 2020-7-6 01:07
本帖最后由 战忽地狱猫 于 2020-7-8 03:45 编辑

感谢大佬

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bookaccount 发表于 2020-7-6 06:00
找找解析json的库                                            
VioletKiss 发表于 2020-7-6 09:01
本帖最后由 VioletKiss 于 2020-7-6 09:06 编辑

看错了,要路径的话这个我就不清楚了
cfanpc 发表于 2020-7-6 09:40
fanxuchao 发表于 2020-7-6 09:46

导入JSON解析库
小年轻在奋斗 发表于 2020-7-6 13:27
代码大概是这样的,比较暴力:
    @Test
    public void testJsonPathAndType() {
        String str = "{\n" +
                "    \"data\":{\n" +
                "        \"age\":180,\n" +
                "        \"username\":\"tom\",\n" +
                "        \"address\":{\n" +
                "            \"province\":\"上海市\",\n" +
                "            \"city\":\"上海市\"\n" +
                "        },\n" +
                "        \"family\":[\n" +
                "            {\n" +
                "                \"brother\":\"jack\"\n" +
                "            },\n" +
                "            {\n" +
                "                \"sister\":\"lucy\"\n" +
                "            }\n" +
                "        ]\n" +
                "    }\n" +
                "}";
        String key = "brother";
        if (!StringUtils.contains(str,key)){
            System.out.println(StrUtil.format("不包含key【{}】",key));
        }
        List<String> list = new ArrayList<>();
        getPath(key,JSONObject.parseObject(str,Map.class),list);
        System.out.println(list.stream().collect(Collectors.joining(".")));
    }

    public Boolean getPath(String key, Map<String,Object> map, List<String> list){
        Boolean[] result = new Boolean[]{Boolean.FALSE};
        if (map.containsKey(key)){
            list.add(0,key);
            return Boolean.TRUE;
        }
        map.forEach((k,v)->{
            if (v instanceof Map || v instanceof JSONObject){
                try {
                    Map<String,Object> temMap = JSONObject.parseObject(JSONObject.toJSONString(v),Map.class);
                    if(getPath(key,temMap,list)){
                        list.add(0,k);
                        result[0] = Boolean.TRUE;
                        return;
                    }
                }catch (Exception e) {
                    System.out.println(StrUtil.format("{}转换Map异常{},执行下一个key值遍历",
                            JSONObject.toJSONString(v),e.getMessage()));
                }
            }
            if (v instanceof List){
                ((List) v).forEach(e -> {
                    if (! (e instanceof Map || e instanceof JSONObject)){
                        return;
                    }
                    if (getPath(key,JSONObject.parseObject(JSONObject.toJSONString(e),Map.class),list)){
                        list.add(0,k);
                        result[0] = Boolean.TRUE;
                        return;
                    }
                });
            }
        });
        return result[0];
    }

至于类型判断你就根据list去根map里面获取之后用instanceof 去判断吧

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
战忽地狱猫 + 1 + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 14:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表