2016-08-15 139 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