gson句柄:预计BEGIN_OBJECT,但是BEGIN_ARRAY
我正在使用Retrofit和Gson
来进行API调用。我对服务器的响应有问题。对于某些属性,它将发送空JSONArray
而不是空JSONObject
。例如: -gson句柄:预计BEGIN_OBJECT,但是BEGIN_ARRAY
:
{
"pagination": {
"links": {
"next": "http://api.com/nextlink"
}
}
}
,但有时当 “链接” 是空的,服务器发送我:
{
"pagination": {
"links": []
}
}
造成java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
。
我知道我可以在创建GsonBuilder
时使用对象“分页”和registerTypeAdapter
使用自定义JsonDeserializer
来处理它。
但我的问题是:这是可能的一般处理这种情况下的所有反应?我无法访问API,所以我无法更改它,并且我不知道我可以获得哪些属性为JSONArray
而不是JSONObject
。
谢谢。
试试这个来检查它是否是一个对象或不
yourJson.get("links").isJsonObject()
检查这些方法
isJsonArray()
isJsonObject()
isJsonNull()
嗨Ravi,谢谢你的回复。但这不是我的问题的答案。我写道,我可以处理这种情况(即对象分页)。但是我正在寻找一个解决方案,一般来说,所有的答案都是一样的。问题是,我不知道所有情况,其中属性可以具有空的JSONArray []而不是JSONObject。 – Daniel
您可以使用JSONTokener得到正常物体的instanceof功能后检查,尝试波纹管:
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){}
[预计BEGIN_ARRAY但是BEGIN_OBJECT](http://sachinpatil.com/blog/2012/07/03/gson/) - 类似的问题与一般的解决方案。 – Ziem