Java 如何比较两个CSV';使用Json';s场
我有一项工作要比较两个CSV的字段:string json object json object date string string如何打开文件并比较它们?到目前为止,我尝试了所有这些方法中的一种,那么接下来呢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<>(
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
}
]
}