战忽地狱猫 发表于 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

导入JSON解析库,很方便的

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 = 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 = Boolean.TRUE;
                        return;
                  }
                });
            }
      });
      return result;
    }
```
至于类型判断你就根据list去根map里面获取之后用instanceof 去判断吧
页: [1]
查看完整版本: 已完成