Gson:读取/ src文件夹中的json文件并将对象追加到它
问题描述:
我需要读/写文件到/ src文件夹(我使用Eclipse,它会自动生成src文件夹)。
我有一个DOM对象是这样的:Gson:读取/ src文件夹中的json文件并将对象追加到它
public class Person {
private String name;
private String surname;
... getters, setters and constructors here ...
}
在/ src文件夹
,我需要一个“persons.json”的文件,在这里我想添加一个新的人,是产生一个新的每次一种形式(秋千)。
当我打开应用程序,我要加载的文件中所有的人:
InputStream in = Person.class.getClassLoader().getResourceAsStream("scontrini_oggi.json");
String personString = IOUtils.toString(in, "UTF-8");
Person[] persons = gson.fromJson(personString, Person.class);
第一个问题:它提供了一个错误,像这样一个文件:
{
"name": "myname",
"surname": "my surname"
},
{
"name": "myname2",
"surname": "mysurname 2"
}
它打印字符串personString(所以它实际上读取文件),但是当它试图转换为Person对象时,就有一个ClassCastException。
然后,另一个问题是,如果我有一个Person对象,我想将它附加到该文件,但我不知道如何实现此目的。
谢谢!
答
应该不是你的代码看起来像
Person[] myTypes = gson.fromJson(personString, Person[].class);
答
首先,JSON文件示例您提供是错误的。
这不是一个有效的JSON文件:
{
"name": "myname",
"surname": "my surname"
},
{
"name": "myname2",
"surname": "mysurname 2"
}
这些是用逗号分隔的两个对象。如果你想对象的列表那么JSON文件必须是这样的:
[
{
"name": "myname",
"surname": "my surname"
},
{
"name": "myname2",
"surname": "mysurname 2"
}
]
然后,在@Raman答案,你应该问的数组。
这是一个完整的工作示例。
package net.sargue.gson;
import com.google.gson.Gson;
import java.util.Arrays;
public class SO36629514 {
private class Person {
private String name;
private String surname;
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' +
", surname='" + surname + '\'' +
'}';
}
}
public static void main(String[] args) {
String json = "[\n" +
" {\n" +
" \"name\": \"myname\",\n" +
" \"surname\": \"my surname\"\n" +
" },\n" +
" {\n" +
" \"name\": \"myname2\",\n" +
" \"surname\": \"mysurname 2\"\n" +
" }\n" +
"]";
Person[] persons = new Gson().fromJson(json, Person[].class);
System.out.println("persons = " + Arrays.toString(persons));
}
}
这是执行结果:
persons = [Person{name='myname', surname='my surname'}, Person{name='myname2', surname='mysurname 2'}]
谢谢。我尝试过这种方式,但只是第一次,我不知道为什么。 – luca89pe
如果你可以控制你的json文件,你可以包装'['和']',使它成为一个数组。 文件内容应该像 - [ //旧文件内容 ] –