java 获取json的jsonPah(com.alibaba.fastjson)
//获取jsonPath public static List<String> getListJsonPath(JSONObject jsonObject) { List<String> jsonPaths= JSONPath.paths(jsonObject).keySet().stream().collect(Collectors.toList()); List<String> parentNode=new ArrayList<>(); //根节点 parentNode.add("/"); for(int i=1;i<jsonPaths.size();i++){ if (jsonPaths.get(i).lastIndexOf("/")>0){ parentNode.add(jsonPaths.get(i).substring(0,jsonPaths.get(i).lastIndexOf("/"))); } } //删除父节点的key for(String p:parentNode){ jsonPaths.remove(p); } List<String> jsonPathList=new ArrayList<>(); Iterator<String> jsonpath=jsonPaths.iterator(); //将/t替换成. while (jsonpath.hasNext()){ String tempjsonPath=jsonpath.next(); for(int j=tempjsonPath.length();--j>=0;){ if(Character.isDigit(tempjsonPath.charAt(j))){ //将0.1.2.3.4 替换为[1] [2] [3] [4] tempjsonPath= tempjsonPath.replaceAll("/"+ tempjsonPath.charAt(j),"["+tempjsonPath.charAt(j)+"]"); } } jsonPathList.add(tempjsonPath.replaceFirst("/", "").replaceAll("/", ".")); } return jsonPathList; }获取json路径上的值(com.jayway.jsonpath)
//读取值 public static String readjson(String json, String jsonPath) { try { Object value = JsonPath.read(json, jsonPath, new Predicate[0]); if (value instanceof Integer) { return value.toString(); } else if (value instanceof String) { return value.toString(); } else if (value instanceof Boolean) { return value.toString(); } else if (value instanceof JSONArray) { JSONArray arr = (JSONArray) value; if (!arr.isEmpty()) { return arr.toJSONString(); } else return ""; } else if (value instanceof LinkedHashMap) { return value.toString(); } else if (value instanceof Float) { return value.toString(); } else { return value.toString(); } } catch (Exception e) { return "path not found"; } }测试方法
@Test public void jsonReplaceVal(){ //构造json JSONObject jsonObject = new JSONObject(); JSONPath.set(jsonObject,"data.person","个人"); JSONPath.set(jsonObject,"data.student[0].age","20"); JSONPath.set(jsonObject,"data.student[0].name[0].v","张三"); JSONPath.set(jsonObject,"data.student[1].age","20"); JSONPath.set(jsonObject,"data.student[1].name[1].nn","张三"); JSONPath.set(jsonObject,"data.student[1].name[0].nn","张"); //获取路径 List<String> listjsonPath=getListJsonPath(jsonObject); System.out.println("listJsonPath:"+listjsonPath.toString()); //将路径上的内容替换 for(int i=0;i<listjsonPath.size();i++){ String tempPath= listjsonPath.get(i); String[] fields=tempPath.split("\\."); if (fields.length>0) { String lastFields = fields[fields.length - 1]; DocumentContext ext = JsonPath.parse(jsonObject); if (lastFields.equals("nn")) { JsonPath p = JsonPath.compile("$." + tempPath); //可先取值在对值进行处理 ext.set(p, "吕厚帅"); String NewList = ext.jsonString(); System.out.println("NewsList:" + NewList); } } } }至此可完成对json子节点的数据处理