android - Retrofit 2,解析json,忽略数组内部的错误数据类型

标签 android json gson retrofit retrofit2

我正在尝试解析来自服务器的响应 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

这是正确的 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/

相关文章:

Android 位置更新作为后台服务

javascript - 谷歌浏览器新标签页的 URL 是什么以及如何将其从 manifest.json 中排除

json - 转换 JSON 对象以从中提取数据时出错

json - vuex 商店可以在开发服务器中使用,但不能在生产版本中使用

java - Gson - 将多个 JSONs 对象合并为一个 JSON

java - 当在登录 Activity 中按下退格键时,Android 在登录屏幕上关闭

android - 单选按钮状态未保留在回收站 View 中

java - Spinner String 项目值获取(不是字符串名称)android

java - 泛型类型上的 GSON(Java 集合)

java - gson - 多态变量的自定义反序列化器