[英]Android. How to parse JsonArrays inside JsonArray
我使用 retrofit 和 json。 我需要像這樣解析 json :
{
"outer_array": [
"one" : [{}, {}],
"two" : [{}],
"three" : [{}],
....
]
}
這是我的代碼的一部分:
@SerializedName("outer_array") var data: List<List<Data>>
但是如何按鍵解析“outer_array”數組的每個元素。 “outer_array”內部的 Arrays 可以從 0 到 n。 也許我應該使用 TypeAdapter。 但是我不知道如何將它應用於這種情況,請幫助我
您提供的 JSON 無效。 您可以在JSONLint上進行檢查。 我想它應該是一個數組(沒有"one":
:)或一個 object( [
在 outer_array 前面應該是{
)在第一種情況下你的代碼很好,在第二種情況下你可以使用 Map (如 HashMap)和如果您需要將 map 轉換為數組,您可以使用類似這樣的東西
data class MyClass(
@SerializedName("outer_array") var data: HashMap<String, List<Data>>
){
val dataAsArray get() = data.map{ it.value }
}
但是,如果您必須解析這些無效數據(例如,您不能要求提供程序/后端解決此問題),即使 TypeAdapter 也無濟於事,因為 JSON 無效並且您將面臨異常,您可以使用正則表達式替換無效[
]
與{
}
(但這太愚蠢了,嘗試說服后端開發人員修復 json:D)
我建議您使用 Gson,這是一項將 JSON 字符串解析為對象的 Google 服務,反之亦然。 Simple add "implementation 'com.google.code.gson:gson:2.8.6'" into dependencies in the app's Gradle file in your Android project.
您可以使用兩種方法:toJson(Object obj) 和 fromJson(string json, Class<>) 如果您有一個名為“MyObject”的 class,則必須將其作為“fromJson”的第二個參數:MyObject.ZA2F222ED4F8EBC2CBB1C ].class 如果是數組。
GitHub: https://github.com/google/gson
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.