【问题标题】:Android/Kotlin: GSON doesn't parse correctly some fields JSONAndroid/Kotlin:GSON 无法正确解析某些字段 JSON
【发布时间】:2019-07-10 18:09:46
【问题描述】:

GSON 无法正确解析我的JSON 并仅针对某些字段返回null
事实上,我正确地得到了每个 doctorrppscode 但我有 null 对于 lifenIdfirstNamelastName
我有一个JSON,它是doctor 的列表,看起来像这样:

[
    {
        "lifenId": "238536",
        "rpps": "10002732211",
        "firstName": "Yolande ",
        "lastName": "Couffinhal",
        "email": null,
        "postalCode": null,
        "city": null,
        "address": null,
        "code": "Médecin Neuro-psychiatrie ",
        "phone": null
    },
...
]

我确定我的JSON 是正确的,因为我收到的JSON 正是我在这里发布的,所以这些值不为空(例如,我不是在谈论电话是@987654336 @在JSON)
我尝试手动解析 JSON 以获取 firstName 和 lastName 它的工作原理(显然是因为我有一个很好的 JSON,但我想确定这一点)

还有我的data class Doctor

data class Doctor(var phone: String,
                  var code: String,
                  var address: MutableList<String>,
                  var email: String,
                  var rpps: String,
                  var city: String,
                  var lastName: Any,
                  var firstName: Any,
                  var lifenId: String,
                  var postalCode: String) {
}  

我的要求:

fun getDoctorsByName(name: String, token: String): Single<List<Doctor>> {
        val url = "lifen/name/" + name
        return repository.getDoctorsByName(url, token).compose(schedulerProvider.getSchedulersForSingle())
    }  

我如何对待退货:

disposable.add(viewModel.getDoctorsByName(search_bar.query.toString(), activity.token)
                    .doOnError {
                        Toast.makeText(activity, it.message, Toast.LENGTH_SHORT).show()
                    }
                    .subscribe(
                        { doctors ->
                            /*val list = ArrayList<Doctor>()
                            val doc = Doctor("", "","","","",doctors[0]["lastName"] as String,doctors[0]["firstName"] as String,"","") parse manually here
                            list.add(doc)
                            adapter.updateList(list)*/
                            adapter.updateList(doctors)
                            Toast.makeText(activity, "LIST COMPLETED", Toast.LENGTH_SHORT).show()
                        }, Throwable::printStackTrace
                    )

                )

【问题讨论】:

    标签: android json kotlin gson rx-java2


    【解决方案1】:

    您的数据类中的名字和姓氏为Any。将它们更改为String,您应该会很好。此外,如果它们有时为空,请将它们标记为可为空,并在访问它们时进行检查。

    【讨论】:

    • Any 是超类。所以不幸的是,你说的没有意义。
    【解决方案2】:

    我发现了这个错误,当我创建GSON 客户端时,我放置了一个过滤器,如下所示:

    fun provideGson(): Gson {
            return GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                .create()
        }
    

    所以我刚刚删除了这个过滤器,这就是为什么 lifenIdfirstNamelastNameGSON 没有得到这些字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      相关资源
      最近更新 更多