安卓:如何解析JSON阵列串
的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]"....]
我如何得到它以上面请求的格式返回?
您没有按照put()
的规则在JSONArray
上执行。参数应该是:
a JSONObject,JSONArray,String,Boolean,Integer,Long,Double,NULL或null。可能不是NaN或无限。不支持的值不被允许,并且会导致数组处于不一致的状态。
com.example.zach.projectFile.Person
就不是这些。 JSONArray
正在做的是在Person
对象上调用toString()
并将其用作数组的值。
你的选择是:
落实
Person
像toJSONObject()
,返回Person
的JSONObject
表示(例如,一个JSONObject
,当变成JSON,导致类似{"fName":"Bob","lName":"Smoe","info":"is tall"}
)。然后,使用put(peopleList.get(i).toJSONObject()
填写JSONArray
。使用比
org.json
类更复杂的东西,比如Gson。
此外,安德烈亚斯的笔记是正确的。你不解析JSON。您正在生成JSON。解析JSON会将包含JSON的String
转换为Person
对象。
我有一个奇怪的问题。我在等待答案时做了类似的事情(我使用了jsonObj.put(“fName”,fName);)但是我遇到了一个问题,每次使用jArray.put(jsonObj)将对象放入数组中时,只有最后一个对象才进入的数组。所以如果有10个人,最后一个是“克莱德”,那么jArray有10个条目,但他们都是克莱德。当我遍历它时,添加所有对象属性,但是然后覆盖jArray.put()方法上的数组。有什么建议么? – zachThePerson
@zachThePerson:每个'Person'创建新的'JSONObject'实例。听起来你正在重复使用同一个。 – CommonsWare
感谢!我移动了“JSONObject jsonObj = new JSONObject();”进入循环,它完美的工作! – zachThePerson
首先,这不是*解析*。解析是另一种方式(字符串到JSON)。其次,它取决于'jArray'是什么。 – Andreas
jArray是JSONArray – zachThePerson