Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 如何解析可以是对象或数组的JSON?_Android_Json - Fatal编程技术网

Android 如何解析可以是对象或数组的JSON?

Android 如何解析可以是对象或数组的JSON?,android,json,Android,Json,我正在从我的服务器返回一个JSON字符串,它可以是JSONArray或JSONObject,但我事先不知道会得到什么(至少不在代码的这一部分) 有办法解决这个问题吗?我的第一个猜测是这样做: if (jsonString.startsWith("[")) { r = new JSONArray(jsonString); } else { r = new JSONObject(jsonString); } 但是这感觉有点“黑客化”。使用instanceof怎么样 非常粗糙,但你可以试

我正在从我的服务器返回一个JSON字符串,它可以是
JSONArray
JSONObject
,但我事先不知道会得到什么(至少不在代码的这一部分)

有办法解决这个问题吗?我的第一个猜测是这样做:

if (jsonString.startsWith("[")) {
   r = new JSONArray(jsonString);
} else {
   r = new JSONObject(jsonString);
}

但是这感觉有点“黑客化”。

使用
instanceof
怎么样


非常粗糙,但你可以试试这个

try {
JSONObject object = new JSONObject(jsonString);
// u received a json object
} catch (JSONException e) {
// you received a json array
JSONArray array = new JSONArray(jsonString);
}

如果可能的话,与服务器开发人员讨论如何使响应始终为对象或数组。服务器返回两个不同的答案已经有点不妥了。同意@TimCastelijns,最干净的方法是更改服务器。@TimCastelijns幸运的是,我是服务器开发人员,但如果有其他解决方案,我还不想触碰界面。还有其他解决方案,如您介绍的解决方案,但没有一个是“干净”的作为服务器的责任,以客户端可以轻松使用的格式交付数据,我同意这是可行的,但这与OP在if语句中所做的差不多。唯一的问题是,如果您出于任何原因没有收到JSON,那么在解析为jsonarray时,catch部分可能会再次崩溃。在客户端没有很好的方法可以做到这一点。你得到结果了吗?我更改了服务器端,但如果不可能,你的解决方案似乎就是这样做的。@BartFriederichs完全同意更改服务器是最好的解决方案。但这不是答案
try {
JSONObject object = new JSONObject(jsonString);
// u received a json object
} catch (JSONException e) {
// you received a json array
JSONArray array = new JSONArray(jsonString);
}