2016-04-14 66 views
0

我需要读/写文件到/ 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对象,我想将它附加到该文件,但我不知道如何实现此目的。
谢谢!

回答

0

应该不是你的代码看起来像

Person[] myTypes = gson.fromJson(personString, Person[].class);

+0

谢谢。我尝试过这种方式,但只是第一次,我不知道为什么。 – luca89pe

+0

如果你可以控制你的json文件,你可以包装'['和']',使它成为一个数组。 文件内容应该像 - [ //旧文件内容 ] –

1

首先,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'}] 
+0

谢谢,第一个问题现在似乎解决了。对于第二个问题?有没有解决方案来追加另一个人的文件? 谢谢! – luca89pe

+0

将该人添加到阵列。写新的数组覆盖文件。如果您需要更多信息,请提出其他问题。 – sargue

相关问题