2016-04-14 81 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

相關問題