我的应用从Web服务接收JSON响应并处理数据。收到的响应可以包含任意数量的对象。我常用的解析方法是:
JSONObject jsonObj = new JSONObject(json);
JSONArray arrChanges = jsonObj.getJSONObject("Changes").getJSONArray("Row");
for (int i = 0; i < arrChanges.length(); i++)
{
// do stuff
}
这通常会在对象Row
中获取数组Changes
,并且工作正常。但是,我测试了它只返回了一条记录,突然收到错误:JSONObject cannot be converted to JSONArray
。看完json后,我可以看到,因为现在只有一个对象,它不再是JSONArray
,现在只是JSONObject
。意味着尝试使用getJSONArray
显然会失败。
所以我的问题是;考虑到我将收到不同数量的项目(0到批次),我如何可靠地解析这些数据(不知道它将有多少记录)?
答案 0 :(得分:0)
强制你的json成为客户端的数组。
编辑:我说过客户,我只是指你创建它的地方。var json = [];
json.push({"yourdataname":"yourdatavalue"});
答案 1 :(得分:0)
尝试使用此概念编辑解析
if (<your jsonobject> instanceof JSONArray)
{
//parse as an jsonarray
for(....;....;...){
//your logic
}
}
else{
//parse as jsonobject without using any index value
}
希望这可以帮助您解决问题。
答案 2 :(得分:0)
另一种方法:
try{
JSONArray arrChanges = jsonObj.getJSONObject("Changes").getJSONArray("Row");
for (int i = 0; i < arrChanges.length(); i++)
{
// do stuff
}
}catch(JSONException e){
//i assume that the actual data is json array if not this block is called try jsonobject parsing here
// its something like try catch inside try catch
}