我正在嘗試使用 kotlin 可序列化將 json 檔案決議為串列。這是我的資料類。
@Serializable
data class Book(
val epub : String,
val fb2 : String,
val mobi : String,
val djvu : String,
val title : String,
val author : String,
val anotation: String,
val cover_uri : String,
)
@Serializable
data class Books(
@Serializable (with = BookListSerializer::class)
val books : List<Book>
)
object BookListSerializer : JsonTransformingSerializer < List < Book >> ( ListSerializer ( Book.serializer ()))
在這里,我試圖決議一個字串
val books = Json.decodeFromString<Books>(stringJson)
這是我的 Json 字串
[
{
"anotation": "Этот город",
"author": "Чарльз Плэтт",
"cover_uri": "null",
"djvu": "null",
"epub": "/b/301494/epub",
"fb2": "/b/301494/fb2",
"mobi": "/b/301494/mobi",
"title": "New York Times (Пульс Нью-Йорка) (fb2)"
},
{
"anotation": "Способна л",
"author": "Триш Уайли",
"cover_uri": "/i/45/390445/cover.jpg",
"djvu": "null",
"epub": "/b/390445/epub",
"fb2": "/b/390445/fb2",
"mobi": "/b/390445/mobi",
"title": "Лучший мужчина Нью-Йорка (fb2)"
}
]
我總是收到這個錯誤
kotlinx.serialization.json.internal.JsonDecodingException: Expected start of the object '{', but had 'EOF' instead
JSON input: .....2","mobi":"/b/49442/mobi","title":"I love New York (fb2)"}]
我會很高興和感激任何幫助
uj5u.com熱心網友回復:
tl;博士
交換這個
val books = Json.decodeFromString<Books>(stringJson)
有了這個
val books = Json.decodeFromString<List<Book>>(stringJson)
您正在嘗試反序列化一個 JSON 陣列,[ ... ]但Books在呼叫時將一個型別的物件宣告為目標decodeFromString,因此類似于{ books: [ ... ] }.
您要么必須將 JSON 陣列包裝在booksJSON 物件的屬性中,要么在反序列化期間將預期型別更改為List<Book>.
因此,除了上述解決方案,您還可以執行以下操作:
val wrappedStringJson = """
{
"books": $stringJson
}
""".trimIndent()
val books = Json.decodeFromString<Books>(wrappedStringJson)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365266.html
