【问题标题】:Converting a JSONArray to csv using java使用 java 将 JSONArray 转换为 csv
【发布时间】:2020-07-23 20:16:38
【问题描述】:

我有一个这样的 JSONArray ->

[ 
{ "Name" : "Test1", "Age" : 10, "Gender" : "M", "Description" : "Hello World" }, 
{ "Name" : "Test2", "Age" : 21, "Gender" : "M", "Description" : "Bye\nWorld" }
]

我需要将其转换为 csv 格式。我正在使用org.json.CD 来实现这一点 String csv = CDL.toString(arr); 其中arr 是上面给出的 JSONArray。生成的 csv 字符串为Name,Age,Gender,Description\nTest1,12,M,Hello World\nTest2,21,M,Bye\nWorld。这个的 csv 输出会是这样的

Name,Age,Gender,Description
Test1,12,M,Hello World
Test2,21,M,Bye
World

但这不是正确的转换。正确的转换应该是

Name,Age,Gender,Description
Test1,12,M,Hello World
Test2,21,M,Bye\nWorld

无法手动将此字符串 Name,Age,Gender,Description\nTest1,12,M,Hello World\nTest2,21,M,Bye\nWorld 更改为 Name,Age,Gender,Description\nTest1,12,M,Hello World\nTest2,21,M,Bye\\nWorld我该如何解决这个问题?

PS JSONArray(name, age, gender, description) 中的值不固定。我正在寻找一种以通用方式解决此类问题的方法

【问题讨论】:

标签: java csv org.json


【解决方案1】:

不要“手动”生成 CSV 数据,而是使用 CSV 解析器(如 OpenCSV)为您生成它。这种方式而不是

Test2,21,M,Bye
World

你会得到类似的格式

Test2,21,M,"Bye
World"

"Test2","21","M","Bye
World"

哪个解析器能够正确地读回原始数据。

演示:

//writing CSV
StringWriter sw = new StringWriter();//to create String for demonstration purpose
CSVWriter csvWriter = new CSVWriter(sw);

String[] array = {"Test2","21","M","Bye\nWorld"};
csvWriter.writeNext(array,false);

String csvString = sw.toString();
System.out.println(csvString);

//reading CSV
CSVReader csvReader = new CSVReader(new StringReader(csvString));
//in case of many lines
for (String[] line : csvReader){//in case of many lines

    for (String cell : line){//handle each line
        System.out.print("<"+cell + ">");
    }
    System.out.println();
}

输出:

Test2,21,M,"Bye
World"

<Test2><21><M><Bye
World>

如你所见

"Bye
World"

被正确解释为带有行分隔符 (\n) 的单个 cell,并且能够打印为

<Bye
World>

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2016-02-13
    • 2015-06-28
    相关资源
    最近更新 更多