Java 如何比较两个CSV';使用Json';s场

Java 如何比较两个CSV';使用Json';s场,java,json,csv,arraylist,Java,Json,Csv,Arraylist,我有一项工作要比较两个CSV的字段:string json object json object date string string如何打开文件并比较它们?到目前为止,我尝试了所有这些方法中的一种,那么接下来呢 public class MainApp { public static void main(String[] args) throws IOException{ Collection<Object> lines = new ArrayList<>(

我有一项工作要比较两个CSV的字段:string json object json object date string string如何打开文件并比较它们?到目前为止,我尝试了所有这些方法中的一种,那么接下来呢

public class MainApp {

public static void main(String[] args) throws IOException{

    Collection<Object> lines = new ArrayList<>();

    String filePath = ".\\sheet.csv";

    Reader reader = Files.newBufferedReader(Paths.get(filePath));
    CSVParser csvParser = new CSVParser(reader,CSVFormat.DEFAULT.withFirstRecordAsHeader().withIgnoreHeaderCase().withTrim());
    {
        for (CSVRecord csvRecord : csvParser) {
            String name = csvRecord.get("name");
            String email = csvRecord.get("jobSpecification");
            String phone = csvRecord.get("assignedProject");
            String country = csvRecord.get("lastUpdated");
            String id = csvRecord.get("id");
            String comments = csvRecord.get("comments");

            Data row = new Data(name, email, phone, country, id, comments);
            
            lines.add(row);

        }
    }
    for (Object d : lines) {
        System.out.println(d.toString());
    }
}

所以现在我认为只剩下比较了
CSV(我制作的)看起来像

为了比较两个CSV,我建议在包含CSV字段的类上使用equals方法,并逐行迭代这些文件, 但您必须在数据类中实现自己的equals和hashcode方法

有一件事你需要考虑——两个JSON的比较不是很容易,有很多图书馆,但是几乎所有的图书馆都使用严格的比较方法,这意味着比较两个。 具有不同字段顺序、嵌套字段顺序或嵌套数组项顺序的json将导致这些json对象之间的误判比较

允许轻松比较的库是jsonassert库:

        <dependency>
            <groupId>org.skyscreamer</groupId>
            <artifactId>jsonassert</artifactId>
            <version>1.5.0</version>
            <scope>compile</scope>
        </dependency>
MainApp类:

List<Data> linesFromFirstCsv = new ArrayList<>();
List<Data> linesFromSecondCsv = new ArrayList<>();

// add here line by line values from csv to relevant lists. (create Data objects)

    if(linesFromFirstCsv.size() == linesFromSecondCsv.size()) {
        for (int i = 0; i < Math.min(linesFromFirstCsv.size(), linesFromSecondCsv.size()); i++) {
            System.out.println(linesFromFirstCsv.get(i).equals(linesFromSecondCsv.get(i)));
        }
    } else {
        System.out.println("not equals");
    }

不太清楚你想在这里完成什么。但是,最好有:
Collection line=new ArrayList()
行。添加(新数据(姓名、电子邮件、电话、国家/地区、id、评论))
@DevilsHnd我试图比较两个csv,每个csv都有两个字段,实际上是JSON,其余的字段是数据、字符串、整数,所以我从每一行创建了一个对象。但是接下来呢?谢谢你,在几行中我更改了字段,它说这是真的。奇怪的
//Data class
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Data data = (Data) o;
    return Objects.equals(name, data.name) &&
            Objects.equals(email, data.email) &&
            Objects.equals(phone, data.phone) &&
            Objects.equals(country, data.country) &&
            Objects.equals(id, data.id) &&
            deepJSONsEquals(comments, data.comments);
}

private boolean deepJSONsEquals(String firstJson, String secondJson) {
    try {
        return JSONCompare.compareJSON(firstJson, secondJson, JSONCompareMode.LENIENT).passed();
    } catch (JSONException e) {
        e.printStackTrace();
        return false;
    }
}

@Override
public int hashCode() {
    return Objects.hash(name, email, phone, country, id, comments);
}
List<Data> linesFromFirstCsv = new ArrayList<>();
List<Data> linesFromSecondCsv = new ArrayList<>();

// add here line by line values from csv to relevant lists. (create Data objects)

    if(linesFromFirstCsv.size() == linesFromSecondCsv.size()) {
        for (int i = 0; i < Math.min(linesFromFirstCsv.size(), linesFromSecondCsv.size()); i++) {
            System.out.println(linesFromFirstCsv.get(i).equals(linesFromSecondCsv.get(i)));
        }
    } else {
        System.out.println("not equals");
    }
{
    "comments":
    [
        {
        "timestamp": 123123123,
        "id": "1212",
        "body": "lorem ipsum"
        },
        {
        "body": "lorem ipsum2",
        "id": "1213",
        "timestamp": 123123125
        },
        {
        "id": "1214",
        "body": "lorem ipsum3",
        "timestamp": 123123129
        }
    ]
}
{
    "comments":
    [
        {
        "id": "1213",
        "body": "lorem ipsum2",
        "timestamp": 123123125
        },
        {
        "id": "1212",
        "body": "lorem ipsum",
        "timestamp": 123123123
        },
        {
        "id": "1214",
        "body": "lorem ipsum3",
        "timestamp": 123123129
        }
    ]
}