Json内容比对_json格式解析

Json内容比对_json格式解析packageutil;importcom.jayway.jsonpath.Configuration;importcom.jayway.jsonpath.JsonPath;import

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

package util; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.JsonPath; import java.io.File; import java.io.IOException; import java.nio.file.*; import java.util.*; import java.util.regex.*; public class Test1 { private static String filePath = System.getProperty("user.dir") +"/20181016/"; private static Set<String> toCheck = new HashSet<>(); private static Set<String> toBeCheck = new HashSet<>(); public static void main(String[] args) throws IOException { validate("UserToAdress","name","$.data","check","$.data"); } /** * 终极规整方法 * @param srcFilePattern 源文件 * @param srcExpression 源文件json要查找的节点 * @param disFilePattern 目标文件 * @param dstExpression 目标文件json要查找的节点 * @throws IOException */ private static void validate(String caseId,String srcFilePattern, String srcExpression, String disFilePattern, String dstExpression) throws IOException { toCheck=retrieveList(srcFilePattern,srcExpression); toBeCheck=retrieveList(disFilePattern,dstExpression); System.out.println(toCheck); System.out.println(toBeCheck); toCheck.removeAll(toBeCheck); System.out.println("These are "+toCheck.size()+" missing "+" "+ caseId); System.out.println("There are " +String.join(",",toCheck)); } /** * * @param srcFileName 文件名 * @param srcFilePattern 查找的json 节点 * @return 结果集 * @throws IOException */ private static Set<String> retrieveList(String srcFileName, String srcFilePattern) throws IOException { ArrayList<String> names=readFileName(srcFileName); Set<String> target=new HashSet<>(); for (String fileName:names){ for (String result:validate(fileName,srcFilePattern)){ //System.out.println(result); target.add(result); } } return target; } /** * 输入文件名,返回满足的所有文件名,例:输入name,返回存在的name,name1,name2,name3 * @param fileName * @return 文件名list */ public static ArrayList<String> readFileName(String fileName) { /** * 将目标目录封装成 File 对象。 */ File dir = new File(filePath); Pattern pattern =Pattern.compile(fileName +"[\\d]*.json"); /** * 获取目录下的所有文件和文件夹 */ String[] names = dir.list(); ArrayList<String> newName= new ArrayList<>(); for (String name : names) { if (pattern.matcher(name).matches()){ //System.out.println(name); newName.add(name); } } return newName; } /** * * @param srcFileName 源文件名字 * @param srcFilePattern 需要查找的json节点 如:$..id查找二级节点id的值 * @throws IOException * @return Set 返回结果集合 */ private static Set<String> validate(String srcFileName, String srcFilePattern) throws IOException { String json = new String(Files.readAllBytes(Paths.get(filePath+srcFileName))); Object document = Configuration.defaultConfiguration().jsonProvider().parse(json); Set<String> target=new HashSet<>(); Set<String> targetNew=new HashSet<>(); boolean flag="class net.minidev.json.JSONArray".equals(JsonPath.read(document,srcFilePattern).getClass().toString()); System.out.println(JsonPath.read(document,srcFilePattern).getClass().toString()); if (flag){ List<Object> names = JsonPath.read(document,srcFilePattern); //System.out.println(names); Iterator<Object> iter = names.iterator(); while(iter.hasNext()){ //执行过程中会执行数据锁定,性能稍差,若在循环过程中要去掉某个元素只能调用iter.remove()方法。 target.add(iter.next()+""); } }else{ String names = JsonPath.read(document,srcFilePattern)+""; target.add(names); } //获取出来的Set有重复,将重复的去重 List<String> tempList= new ArrayList<>(); for(String i:target){ if(!tempList.contains(i)){ tempList.add(i); } } for(String i:tempList){ targetNew.add(i); } return targetNew; } }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168336.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号