Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用可变对象数解析Java中的JSON_Android_Json - Fatal编程技术网

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

Android 使用可变对象数解析Java中的JSON,android,json,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 } JSONOb

我的应用程序从web服务接收JSON响应并处理数据。接收到的响应可以有任意数量的对象。我通常的解析方法是:

JSONObject jsonObj = new JSONObject(json);
JSONArray arrChanges = jsonObj.getJSONObject("Changes").getJSONArray("Row");
for (int i = 0; i < arrChanges.length(); i++)
{
    // do stuff
}
JSONObject jsonObj=新的JSONObject(json);
JSONArray arrChanges=jsonObj.getJSONObject(“变更”).getJSONArray(“行”);
对于(int i=0;i
这通常会在对象
更改中获取数组
,并且工作正常。但是,我测试它时只返回了一条记录,突然发现错误:
JSONObject无法转换为JSONArray
。在查看json之后,我可以看到,因为现在只有一个对象,它不再是
JSONArray
,它现在只是一个
JSONObject
。这意味着尝试使用
getJSONArray
显然会失败


所以我的问题是,;考虑到我将收到不同数量的项目(0到批次),我如何可靠地解析这些数据(不知道它将有多少记录)?

强制您的json成为客户端的一个数组

编辑:我说的是客户,我只是说无论你在哪里创建它

var json = [];

json.push({"yourdataname":"yourdatavalue"});

尝试借助此概念编辑解析

if (<your jsonobject> instanceof JSONArray)
 {
  //parse as an jsonarray
  for(....;....;...){
 //your logic
 }
 }
 else{
 //parse as jsonobject without using any index value
 }
if(JSONArray实例)
{
//解析为jsonarray
对于(…;…;…){
//你的逻辑
}
}
否则{
//作为jsonobject解析,不使用任何索引值
}

希望这能帮助您解决问题。

另一种方法是:

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
}
试试看{
JSONArray arrChanges=jsonObj.getJSONObject(“变更”).getJSONArray(“行”);
对于(int i=0;i
post json response to您可以检查
长度
对吗?您可以询问
jsonObj
是否是
数组
的实例,我建议您使用Gson库。只需创建一个模态类,就可以随时检查数组的长度。或者如果(jsonObj.getJSONObject(“Changes”).getJSONArray(“Row”)!=null)或者如果(!jsonObj.getJSONObject(“Changes”).getJSONArray(“Row”).isEmpty())什么?不,我没有提到关于PHP的任何内容…我同意在创建json时,数据应该强制为数组,即使数组只包含一项,您也需要一些结构。这是我的理想解决方案,但我恐怕不太理解这段代码如何将JSONObject转换为JSONArray。您的数组需要一个数组,它是否有1件物品或1000件物品,而不是n大小的物品集合。强迫它像{“Row”:[{},{}]}我希望这会有所帮助。我不是专家,但我曾经有过类似的问题。