转换前:
{
"result": [
{
"class": "A5",
"student": [
"name",
"age",
"sex"
],
"values": [
[
"aaa",
"12",
"M"
],
[
"bbb",
"13",
"F"
]
]
}
],
"code": 0
}
转换逻辑:
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\Administrator\\Desktop\\aaa.json");
new Test().json2csv(file);
}
public File json2csv(File jsonFile) throws IOException {
JSONReader reader = null;
BufferedWriter bufferedWriter = null;
try {
reader = new JSONReader(new FileReader(jsonFile));
File target = new File(jsonFile.getParent(), "inventory.csv");
bufferedWriter = new BufferedWriter(new FileWriter(target));
reader.startObject();
while (reader.hasNext()) {
String name = reader.readString();
if (name.equalsIgnoreCase("result")){
readResultPart(reader,bufferedWriter);
}else if (name.equalsIgnoreCase("code")){
reader.readInteger();
}
}
reader.endObject();
bufferedWriter.close();
return target;
} catch (Exception e) {
e.printStackTrace();
}finally {
if (null != reader){
reader.close();
}
bufferedWriter.close();
}
return null;
}
private void readResultPart(JSONReader reader,BufferedWriter writer) throws IOException {
reader.startArray();
while (reader.hasNext()){
reader.startObject();
while (reader.hasNext()){
String key = reader.readString();
if (key.equalsIgnoreCase("class")){
reader.readString();
}else if (key.equalsIgnoreCase("student")){
reader.startArray();
StringBuilder attrNames = new StringBuilder();
while (reader.hasNext()){
attrNames.append(",\""+reader.readString()+"\"");
}
reader.endArray();
writer.write(attrNames.toString());
}else if (key.equalsIgnoreCase("values")){
reader.startArray();
while (reader.hasNext()){
writer.newLine();
writer.write(readValueSubArray(reader));
}
reader.endArray();
}
}
reader.endObject();
}
reader.endArray();
}
private String readValueSubArray(JSONReader reader){
StringBuilder stringBuilder = new StringBuilder();
reader.startArray();
while (reader.hasNext()){
stringBuilder.append(",\""+reader.readString()+"\"");
}
reader.endArray();
return stringBuilder.toString();
}
}
转换后:
,"name","age","sex"
,"aaa","12","M"
,"bbb","13","F"