Saya memiliki JsonObject
nama "mapping"
dengan konten berikut:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
Saya tahu saya bisa mendapatkan array "servers"
dengan:
mapping.get("servers").getAsJsonArray()
Dan sekarang saya ingin menguraikannya JsonArray
menjadi java.util.List
...
Apa cara termudah untuk melakukannya?
Gson
.JsonArray
implementasinyaIterable
. Hanya saja saya juga menemukan cara baru selain menambahkan perpustakaan baru.Jawaban:
Jelas cara termudah untuk melakukannya adalah menggunakan fungsi parsing default Gson
fromJson()
.Ada implementasi fungsi ini yang cocok untuk saat Anda perlu melakukan deserialisasi ke salah satu
ParameterizedType
(misalnya, apa sajaList
), yaitufromJson(JsonElement json, Type typeOfT)
.Dalam kasus Anda, Anda hanya perlu mendapatkan
Type
dari aList<String>
dan kemudian mengurai array JSON menjadi ituType
, seperti ini:Dalam kasus Anda
yourJson
adalah aJsonElement
, tapi bisa juga aString
, anyReader
atau aJsonReader
.Anda mungkin ingin melihat dokumentasi Gson API .
sumber
Type
bisa didapatkan di paket apa?Type
adalah antarmukajava.lang.reflect
getString()
alih-alihget()
atau.fromJson()
mengeluh.Kode di bawah ini menggunakan
com.google.gson.JsonArray
. Saya telah mencetak jumlah elemen dalam list serta elemen dalam ListKELUARAN
sumber
Saya membaca solusi dari situs resmi Gson di sini
Dan kode ini untuk Anda:
Hasil acara di monitor:
sumber
new Gson().fromJson()
Saya bisa mendapatkan pemetaan daftar untuk bekerja dengan hanya menggunakan
@SerializedName
untuk semua bidang .. tidak perlu logika sekitarType
.Menjalankan kode - pada langkah # 4 di bawah - melalui debugger, saya dapat mengamati bahwa
List<ContentImage> mGalleryImages
objek diisi dengan data JSONBerikut contohnya:
1. JSON
2. Kelas Java dengan Daftar
3. Kelas Java untuk item Daftar
4. Kode Java yang memproses JSON
sumber
Mengingat Anda mulai dengan
mapping.get("servers").getAsJsonArray()
, jika Anda memiliki akses ke Jambu bijiStreams
, Anda dapat melakukan satu baris di bawah ini:Note
StreamSupport
tidak akan bisa bekerja padaJsonElement
tipe, jadi ini tidak cukup.sumber