Android gson句柄:应为BEGIN\u对象,但为BEGIN\u数组
我正在使用改装和Android gson句柄:应为BEGIN\u对象,但为BEGIN\u数组,android,gson,deserialization,retrofit,Android,Gson,Deserialization,Retrofit,我正在使用改装和Gson进行API调用。我对服务器的响应有问题。对于某些属性,它发送的是空的JSONArray,而不是空的JSONObject。e、 g: 在正常情况下: { "pagination": { "links": { "next": "http://api.com/nextlink" } } } 但有时当“链接”为空时,服务器会向我发送以下消息: { "pagination": { "l
Gson
进行API调用。我对服务器的响应有问题。对于某些属性,它发送的是空的JSONArray
,而不是空的JSONObject
。e、 g:
在正常情况下:
{
"pagination": {
"links": {
"next": "http://api.com/nextlink"
}
}
}
但有时当“链接”为空时,服务器会向我发送以下消息:
{
"pagination": {
"links": []
}
}
这导致java.lang.IllegalStateException:应为BEGIN\u对象,但为BEGIN\u数组
我知道,在创建GsonBuilder
时,我可以使用自定义JsonDeserializer
进行对象“分页”和registerTypeAdapter
来处理它
但我的问题是:是否有可能对所有反应都进行一般处理?我没有访问API的权限,因此无法更改它,也不知道哪些属性可以为空JSONArray
,而不是预期的JSONObject
多谢各位 尝试此操作以检查它是否为对象
yourJson.get("links").isJsonObject()
检查这些方法
isJsonArray()
isJsonObject()
isJsonNull()
尝试此操作以检查它是否为对象
yourJson.get("links").isJsonObject()
检查这些方法
isJsonArray()
isJsonObject()
isJsonNull()
使用instanceof函数检查正常对象后,可以使用JSONTokener获取正常对象,请尝试以下操作:
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){}
请阅读此处的详细信息在使用instanceof函数检查正常对象后,可以使用JSONTokener获取正常对象,请尝试以下操作:
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){}
在这里阅读更多信息嗨,拉维,谢谢你的回复。但这并不是我问题的答案。我写到我可以处理这种情况(即对象分页)。但我正在寻找一个解决方案,这将对所有的反应普遍有效。问题是,我不知道所有情况,其中属性可以有空的JSONArray[]而不是JSONObject。但这并不是我问题的答案。我写到我可以处理这种情况(即对象分页)。但我正在寻找一个解决方案,这将对所有的反应普遍有效。问题是,我不知道所有情况,其中属性可以有空的JSONArray[]而不是JSONObject。-具有一般解的类似问题具有一般解的类似问题。