2016-03-04 69 views
0

我正在使用Gson來寫入和讀取文件。Java JSON - gson - 追加新數據,格式不正確JSON

每次創建用戶時,我都會添加一行顯示用戶名和ID的行。

我這樣做有以下(UserAccount是我的POJO類,br爲我的讀者緩衝)::

UserAccount accountObj = new UserAccount(); 
FileWriter writer = new FileWriter("store.json", true); 
accountObj.setUser(NewUserMethod()); 
accountObj.setID(NewIDMethod()); 
String json = gson.toJson(accountObj); 
writer.write(json); 
writer.close(); 

這使得JSON文件,它的工作 - 這樣的:

{"USER":"noob123","ID":"99"} 

當新用戶這樣做,它會追加下一行,像這樣::

{"USER":"noob123","ID":99}{"USER":"pro321","ID":100} 

當我嘗試讀取這個JSON文件,我得到了以下錯誤::

"use JsonReader.setLenient(true) to accept malformed JSON at line 1, column 36" 

所以我的理解可能是不正確的格式,可能需要這樣的東西::

{"ACCOUNT":{"USER":"noob123","ID":99},"ACCOUNT":{"USER":"pro321","ID":100}} 

我已經花了一些時間試圖在這一創建JSON格式,或者至少在使用匹配的USER名稱時引用正確的USER鍵。任何幫助是極大的讚賞。

謝謝

+2

你需要把它寫成一個JSON數組,即用'[]'包圍。但是,您需要讀取整個文件,追加'UserAccount',並再次寫入整個文件 - 不能簡單地追加。 –

回答

1

您應該使用JSONArray將此信息保存到文件中。然後你可以將文件內容讀入UserAccount列表中,在這個列表中添加新的對象。 然後你應該覆蓋文件的內容。 例如:

UserAccount accountObj = new UserAccount(); 
accountObj.setUser(NewUserMethod()); 
accountObj.setID(NewIDMethod()); 

List<UserAccount> userAccounts = gson.fromJson(<jsonContent>, new TypeToken<List<UserAccount>>() { 
}.getType()); 

userAccounts.add(accountObj); 

String json = gson.toJson(userAccounts); 
writer.write(json); 
writer.close();