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。-具有一般解的类似问题具有一般解的类似问题。