【问题标题】:How to parse un json string into a List with MOSHI如何使用 MOSHI 将 un json 字符串解析为列表
【发布时间】:2021-02-06 09:24:49
【问题描述】:

我正在寻找一个这样构建的结果 json:

{"list": [
        {
            "data1": "data1",
            "transaction": {
                "data2": "data2",
                "data3": "data3"
            },
            "breakdowns": [
                {
                    "data4": "data4",
                    "data5": "data5"
                }
            ]
        }
]}

我正在使用 moshi 和 okHttpClient 来处理这个 json。 我建立了数据类正确

所以现在当我尝试解析它时(像那样):

 200 -> {
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()

val type: Type = Types.newParameterizedType(List::class.java,PaymentRequest::class.java)

try{
   val q: JsonAdapter<List<PaymentRequest>> = moshi.adapter(type)
   paymentRequest = q.fromJson(response.body!!.source())!!
}catch (e: Exception) {
   println(e)
}

}

我收到了这个错误:com.squareup.moshi.JsonDataException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at path $

【问题讨论】:

    标签: android kotlin okhttp moshi


    【解决方案1】:

    您不能将此 json 视为列表。它本身不是一个列表,但实际上是一个 包含 一个列表的 json 对象。

    为了解决这个问题,首先构建一个类来包装"list"

    @JsonClass(generateAdapter = true)
    data class Wrapper(@Json(name = "list") val list: List<PaymentRequest>)
    

    那么你就可以走了:

    val moshi = Moshi.Builder()
        .add(KotlinJsonAdapterFactory())
        .build()
    val adapter = moshi.adapter<Wrapper>(Wrapper::class.java)
    val paymentRequests = adapter.fromJson(response.body!!.source())!!.list
    

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多