簡體   English   中英

Android。 如何解析 JsonArray 中的 JsonArrays

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM