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