我正在尝试解析来自服务器的响应 json。数据是一个对象数组,但有时服务器会在数组项之间发送一个 bool 值。像这样:
{
"msg_code": 200,
"msg_type": "success",
"msg_text": "success",
"msg_data": [
{
"pid": "1234567",
"time": "1459029423",
"parent_pid": "0"
},
false,
{
"pid": "987654",
"time": "1458997403",
"parent_pid": "0"
}
]
}
如您所见,它们之间有一个false。
当我尝试解析这些时,转换器到达错误的数据类型并抛出如下异常:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BOOLEAN at line 1 column 9988 path $.msg_data[12]
那么我怎样才能跳过这个错误的数据类型并继续解析其他元素呢?
这是我创建 Retrofit 客户端的代码:
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(logLevel);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(logging)
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.build();
gooderApi = new Retrofit.Builder()
.baseUrl(BASE_API_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
.create(ApiInterface.class);
我搜索了很多,我知道我必须创建一个自定义转换器工厂,但所有示例都是旧的并且属于 Retrofit < 2,我不知道如何让它们为我工作。
更新: 类似的问题: GSON ignore elements with wrong type
提前发送。
最佳答案
将调用更改为 JSON 对象
或在服务器中删除 false
。
我认为 Retrofit 没有解决方案......
Bcoz boolean
进入 POJO 对象数组。
Boolean
只是分配给数据数组。
这是正确的 json 看看
{
"msg_code": 200,
"msg_type": "success",
"msg_text": "success",
"msg_data": [
{
"pid": "1234567",
"time": "1459029423",
"parent_pid": "0"
},
false,
{
"pid": "987654",
"time": "1458997403",
"parent_pid": "0"
}
]
}
在 "parent_pid": "0"
之后有 ,
你必须删除它。
享受编码.........
关于android - Retrofit 2,解析json,忽略数组内部的错误数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37474860/