我想将Json文件转换为CSV文件。我将数据从json传递给java对象,然后我尝试将Java对象写入CSV文件,但它给出了NPE。它可能无法从JSON正确获取数据。我不确定它是什么。
读取json到java对象的类
public Student convertJson(File jsonFile) {
Gson gson = new Gson();
Student std;
try{
std = gson.fromJson(new FileReader(jsonFile),Student.class);
return std;
}
catch (FileNotFoundException e) {
return null;
}
}
将对象转换为csv的类
private final String SEPARATOR = ", ";
public void toCSV(List<Student> student) {
try{
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("group.csv"),"UTF-8"));
for(Student std: student){
StringBuffer oneLine = new StringBuffer();
oneLine.append(std.getEmail());
oneLine.append(SEPARATOR);
oneLine.append(std.getName());
oneLine.append(SEPARATOR);
oneLine.append(std.getScoreGroup());
oneLine.append(SEPARATOR);
oneLine.append(std.getCommentGroup());
bw.write(oneLine.toString());
bw.newLine();
}
bw.flush();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
主要
File newfile = new File(pathName);
List<File> files= file.findFile(newfile); // step 1 find files and return arralist of files
System.out.println(files);
List<Student> students = new ArrayList<>(); // array list of objects Student
ReadJson fiel = new ReadJson(); // parses passed json file and returns Student file
List<Group> info = new ArrayList<>();
java.util.Collections.sort(info);
for(int i=0;i<files.size();i++){
Student temp = fiel.convertJson(new File(files.get(i).getName()));
students.add(temp);
}
ConvertJSONFiles json = new ConvertJSONFiles();
json.toCSV(students);
错误
Exception in thread "main" java.lang.NullPointerException
at ca.cmpt213.as2.ConvertJSONFiles.toCSV(ConvertJSONFiles.java:16)
at com.company.Main.main(Main.java:44)
与目标虚拟机断开连接,地址:&#39; 127.0.0.1:63683&#39;,传输:&#39; socket&#39;
新问题:现在它说它无法读取,因为应该有对象而不是数组。
线程中的异常&#34; main&#34; com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但在第2行第13行路径为$ .group时为BEGIN_ARRAY 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:224) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.read(ReflectiveTypeAdapterFactory.java:129) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:220) 在com.google.gson.Gson.fromJson(Gson.java:888) 在com.google.gson.Gson.fromJson(Gson.java:826) at ca.cmpt213.as2.ReadJson.convertJson(ReadJson.java:17) 在com.company.Main.main(Main.java:36)
答案 0 :(得分:-1)
最终的原因在于:
new File(files.get(i).getName())
File.getName()
返回文件路径的最后一部分,因此新创建的文件基本上会丢失所有路径信息。
结果路径很可能不存在,使convertJson(File)
返回null
,传递到List<Student> students
并从那里传递到toCSV(List)
,最后NPE发生。
可能的解决方法:
Student temp = fiel.convertJson(files.get(i));