Android 使用可变对象数解析Java中的JSON
我的应用程序从web服务接收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
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”:[{},{}]}我希望这会有所帮助。我不是专家,但我曾经有过类似的问题。