Rap*_*l M 4 android kotlin okhttp moshi
我正在解析下面的 JSON:
{
"list": [
{
"data1": "data1",
"transaction": {
"data2": "data2",
"data3": "data3"
},
"breakdowns": [
{
"data4": "data4",
"data5": "data5"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我使用 Moshi 和 okHttpClient 来处理这个 JSON。我的数据类是正确的
但是当我尝试如下解析它时:
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
val type = Types.newParameterizedType(List::class.java,PaymentRequest::class.java)
try{
val q = moshi.adapter(type)
paymentRequest = q.fromJson(response.body!!.source())!!
} catch (e: Exception) {
println(e)
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:com.squareup.moshi.JsonDataException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at path $
您不能将此 json 视为列表。它本身不是一个列表,但实际上是一个包含列表的 json 对象。
要解决这个问题,首先构建一个类来包装"list"
:
@JsonClass(generateAdapter = true)
data class Wrapper(@Json(name = "list") val list: List<PaymentRequest>)
Run Code Online (Sandbox Code Playgroud)
然后你就可以开始了:
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
val adapter = moshi.adapter<Wrapper>(Wrapper::class.java)
val paymentRequests = adapter.fromJson(response.body!!.source())!!.list
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6330 次 |
最近记录: |