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;
    }
}

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于CCXT接口建立的多模块数字货币量化交易模型(MMQT)在python中的实现[通俗易懂]

    基于CCXT接口建立的多模块数字货币量化交易模型(MMQT)在python中的实现[通俗易懂]目录一、前言问题的引出MMQT模型的优势二、MMQT简介1.接口模块2.风控模块3.策略模块4.反馈模块三、MMQT的代码实现1.定义中间模块(类)1.初始化2.获取账户信息、交易对信息、订单信息3.数据更新4.创建订单5.获取订单状态6.撤销订单7.获取k线信息2.定义风控模块(类)3.定义策略模块(类)1.策略模块初始化2.技术分析及交易下单3.反馈模块4.相关类实例化1.ccxt实例化2.中间类、风控类、策略类实例化3.调控程序四、回测的代码实现1.获取数据2.数据清洗3.模拟账户初始化4.回测程序五

    2022年6月26日
    116
  • Oracle触发器写法和举例[通俗易懂]

    Oracle触发器写法和举例[通俗易懂]1、declare声明变量后的每个变量都要加分号;2、所有的语句结束和sql语句结尾,都要加分号;3、变量赋值variable:=’1234’如:recordId:=’1234′;4、插入列数据获取:new.colname如:new.exec_record_id5、sql查询写入变量selectcolnameintovariable如:sel…

    2022年7月15日
    12
  • idea21.1 激活码生成【在线注册码/序列号/破解码】

    idea21.1 激活码生成【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    188
  • 变异系数法之python

    变异系数法之python1.简介2.算法原理2.1指标正向化2.2数据标准化2.3计算变异系数2.4计算权重以及得分3.实例分析3.1读取数据3.2指标正向化3.3查看行数和列数3.4数据标准化3.5计算变异系数3.6计算权重3.7计算得分完整代码

    2022年6月12日
    56
  • drupal安装教程mysql_Drupal(一)下载与安装

    drupal安装教程mysql_Drupal(一)下载与安装Drupal是一个使用PHP语言编写的开源内容管理系统(CMS)。然后将安装包解压到web服务器根目录下,如果你使用的是XAMPP,则解压到xampp目录下的htdocs目录。要安装Drupal,我们首先应该建立一个数据库,如在mysql中建立一个名为drupal的数据库。Drupal默认语言是英语,如果我们要创建中文站点,应该首先从http://localize.drupal.org/trans…

    2022年7月20日
    21
  • imx8开发板_安卓反编译教程

    imx8开发板_安卓反编译教程按照官方手册,在ubuntu14.04上搭建环境sudoapt-getuuiduuid-devsudoapt-getzlib1g-devliblz-devsudoapt-getliblzo2-2liblzo2-devsudoapt-getlzopsudoapt-getgit-corecurlsudoapt-getu-boot-toolssudo…

    2022年10月7日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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