2016-08-15 136 views
1

的JSON文件格式,我需要使用看起來像這樣安卓:如何解析JSON陣列串

[{"fName":"Bob","lName":"Smoe","info":"is tall"},{"fName":"Claire","lName":"Smoegan","info":"has a big forehead"}] 

我有我添加到一個JSON數組人的對象列表。代碼如下所示

for (int i = 0; i < peopleList.size(); i++){ 
     try { 
      jArray.put(peopleList.get(i)); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
} 

的問題是,我需要將其轉換爲字符串寫入一個文件,但是當我使用「jArray.toString()」返回

"["[email protected]", "[email protected]", "[email protected]"....] 

我如何得到它以上面請求的格式返回?

+1

首先,這不是*解析*。解析是另一種方式(字符串到JSON)。其次,它取決於'jArray'是什麼。 – Andreas

+0

jArray是JSONArray – zachThePerson

回答

3

您沒有按照put()的規則在JSONArray上執行。參數應該是:

a JSONObject,JSONArray,String,Boolean,Integer,Long,Double,NULL或null。可能不是NaN或無限。不支持的值不被允許,並且會導致數組處於不一致的狀態。

com.example.zach.projectFile.Person就不是這些。 JSONArray正在做的是在Person對象上調用toString()並將其用作數組的值。

你的選擇是:

  1. 落實PersontoJSONObject(),返回PersonJSONObject表示(例如,一個JSONObject,當變成JSON,導致類似{"fName":"Bob","lName":"Smoe","info":"is tall"})。然後,使用put(peopleList.get(i).toJSONObject()填寫JSONArray

  2. 使用比org.json類更復雜的東西,比如Gson。

此外,安德烈亞斯的筆記是正確的。你不解析JSON。您正在生成JSON。解析JSON會將包含JSON的String轉換爲Person對象。

+0

我有一個奇怪的問題。我在等待答案時做了類似的事情(我使用了jsonObj.put(「fName」,fName);)但是我遇到了一個問題,每次使用jArray.put(jsonObj)將對象放入數組中時,只有最後一個對象才進入的數組。所以如果有10個人,最後一個是「克萊德」,那麼jArray有10個條目,但他們都是克萊德。當我遍歷它時,添加所有對象屬性,但是然後覆蓋jArray.put()方法上的數組。有什麼建議麼? – zachThePerson

+0

@zachThePerson:每個'Person'創建新的'JSONObject'實例。聽起來你正在重複使用同一個。 – CommonsWare

+0

感謝!我移動了「JSONObject jsonObj = new JSONObject();」進入循環,它完美的工作! – zachThePerson