我正在使用Retrofit和Gson
进行API调用。我的服务器响应有问题。对于某些属性,它发送空JSONArray
而不是空JSONObject
。 e.g:
正常情况:
{
"pagination": {
"links": {
"next": "http://api.com/nextlink"
}
}
}
但有时当"链接"是空的,服务器发给我这个:
{
"pagination": {
"links": []
}
}
导致java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
。
我知道我可以使用自定义JsonDeserializer
来处理对象" Pagination"创建registerTypeAdapter
时会GsonBuilder
。
但我的问题是:对于所有回复,一般可以处理这种情况吗?我无法访问API,因此我无法更改它,而且我也不知道哪些属性可以为空JSONArray
而不是JSONObject
。
谢谢。
答案 0 :(得分:0)
尝试此操作以检查它是否为对象
yourJson.get("links").isJsonObject()
检查这些方法
isJsonArray()
isJsonObject()
isJsonNull()
答案 1 :(得分:0)
使用instanceof函数检查后,您可以使用JSONTokener获取普通的Object,请尝试以下方法:
String jsonData = "{...}"; //your json data string
JSONTokener tokener = new JSONTokener(jsonData);
try {
Object parsedObj = tokener.nextValue();
if (parsedObj instanceof JSONObject) {
//do something here
}else if (parsedObj instanceof JSONArray){
//do something here
}
}catch(Exception ex){}
在此处阅读更多enter link description here