Не могу обработать список дерева json, используя TypeToken + generics с Gson в Kotlin
У меня есть структура JSON, как показано ниже:
{
"object": "list",
"total": 3,
"data": [
{
"object": "brand",
"id": "15243937043340",
"company": {
"object": "company",
"id": "956936000",
"name": "ABC"
},
"name": "Kindle",
"images": [
"http://www.spacecentrestorage.com/assets/uploads/General/SCS-Slide02-Commercial.jpg"
]
},
{
"object": "brand",
"id": "15243937043340",
"company": {
"object": "company",
"id": "956936000",
"name": "ABC"
},
"name": "Kindle",
"images": [
"http://www.spacecentrestorage.com/assets/uploads/General/SCS-Slide02-Commercial.jpg"
]
},
{
"object": "brand",
"id": "15243937043340",
"company": {
"object": "company",
"id": "956936000",
"name": "ABC"
},
"name": "Kindle",
"images": [
"http://www.spacecentrestorage.com/assets/uploads/General/SCS-Slide02-Commercial.jpg"
]
}
],
"associated": {}
}
И это мое отображение классов данных Gson:
data class Response (
@SerializedName("object")
val obj: String,
val total: Int,
val data: List<*>,
val associated: Response
)
data class Brand (
@SerializedName("object")
val obj: String,
val id: String,
val name: String,
val images: List<String>,
val company: Company
)
data class Company (
@SerializedName("object")
val obj: String,
val id: String,
val name: String
)
Когда дело доходит до извлечения дерева, как указано выше, я обнаружил, что возвращаемая строка данных становится Malformed Json и дает MalformedJsonException для $[0].companies.null.
Я читал о функции рекурсивной десериализации, но в моем случае она не работает. Я прибегаю к десериализации, как показано ниже, используя оригинальный метод, это вызывает ошибки
val response = gson.fromJson(queryResult , Response::class.java)
println("result 2 : $response" )
val dataString = response.data.toString()
println("result 3 : $dataString" )
val brands = Gson().fromJson(dataString, Array<Brand>::class.java).toMutableList()
println("result 4 : $brands" )
Я бы хотел спросить:
Если возвращать компонент json в строку, будут ли удалены все отступы и символы?
Чтобы извлечь все связанные объекты из элементов списка объектов, какие меры предосторожности я должен предпринять для десериализации списка объектов с использованием Gson?
1 ответ
Если вы установите параметр типа data
список в Response
в Brand
GSON знает, как десериализовать элементы списка.
data class Response (
@SerializedName("object")
val obj: String,
val total: Int,
val data: List<Brand>,
val associated: Response
)
Используя это, нет необходимости снова анализировать элементы списка, и вы можете получить все brands
как это:
val response = Gson().fromJson(queryResult , Response::class.java)
val dataList = response.data
print("brands: " )
dataList.forEach { println(it) }