使用可变数量的对象在Java中解析JSON

时间:2014-05-19 15:44:57

标签: android json

我的应用从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到批次),我如何可靠地解析这些数据(不知道它将有多少记录)?

3 个答案:

答案 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
}