[英]How to parse a json string to a List with MOSHI
我正在尋找解析以下 JSON:
{
"list": [
{
"data1": "data1",
"transaction": {
"data2": "data2",
"data3": "data3"
},
"breakdowns": [
{
"data4": "data4",
"data5": "data5"
}
]
}
]
}
我正在使用 Moshi 和 okHttpClient 來處理這個 JSON。我的數據 class 是正確的
但是當我嘗試如下解析它時:
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)
}
我收到此錯誤: 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>)
那么你就可以開始了:
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
val adapter = moshi.adapter<Wrapper>(Wrapper::class.java)
val paymentRequests = adapter.fromJson(response.body!!.source())!!.list
它對我有用,將 Json 轉換為 Moshi 中的列表
@TypeConverter
fun toListAWDataItem(json: String): List<Person>? {
val type: Type = Types.newParameterizedType(
List::class.java,
Person::class.java
)
val adapter: JsonAdapter<List<Person>> = moshi.adapter<List<Person>>(type)
return adapter.fromJson(json)!!.map { it }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.