Saya menggunakan perpustakaan JSON yang disebut JSONObject
(Saya tidak keberatan beralih jika perlu).
Saya tahu cara mengulangi JSONArrays
, tetapi ketika saya mem-parsing data JSON dari Facebook saya tidak mendapatkan array, hanya satu JSONObject
, tapi saya harus dapat mengakses item melalui indeksnya, seperti JSONObject[0]
untuk mendapatkan yang pertama, dan saya tidak tahu bagaimana melakukannya.
{
"http://http://url.com/": {
"id": "http://http://url.com//"
},
"http://url2.co/": {
"id": "http://url2.com//",
"shares": 16
}
,
"http://url3.com/": {
"id": "http://url3.com//",
"shares": 16
}
}
Jawaban:
Mungkin ini akan membantu:
sumber
JSONObject
tidak berurutan dan pernyataan Anda adalah refleksi sederhana dari implementasi pribadi;)for (String key : keys)
untuk kasus saya, saya menemukan iterasi
names()
bekerja dengan baiksumber
Iterating
di Jawa, ini bekerja dengan sangat baik! Terima kasih.Saya akan menghindari iterator karena mereka dapat menambah / menghapus objek selama iterasi, juga untuk penggunaan kode bersih untuk loop. itu hanya akan bersih & lebih sedikit baris.
Menggunakan Java 8 dan Lamda [Pembaruan 4/2/2019]
Menggunakan cara lama [Pembaruan 4/2/2019]
Jawaban Asli
sumber
Tidak dapat percaya bahwa tidak ada solusi yang lebih sederhana dan aman daripada menggunakan iterator dalam jawaban ini ...
names ()
Metode JSONObject mengembalikan aJSONArray
dariJSONObject
kunci, sehingga Anda bisa berjalan meskipun dalam lingkaran:sumber
JSONObject
. Sesuatu sepertiJSONObject object = new JSONObject ("{\"key1\",\"value1\"}");
. Tetapi tidak menempatkan json baku untuk itu, menambahkan item di dalamnya denganput ()
metode:object.put ("key1", "value1");
.sumber
jsonChildObject = iterator.next();
mungkin harus mendefinisikanjsonChildObject
, sepertiJSONObject jsonChildObject = iterator.next();
, tidak?Iterator<JSONObject>
akan memberi peringatan. Saya akan menggantinya dengan obat generik<?>
dan melakukan panggilan padanext()
. Juga, saya akan menggunakangetString("id")
alih-alihget("id")
menghemat melakukan pemeran.org.json.JSONObject sekarang memiliki metode keySet () yang mengembalikan a
Set<String>
dan dapat dengan mudah dilingkari dengan masing-masing.sumber
Pertama-tama letakkan ini di suatu tempat:
Atau jika Anda memiliki akses ke Java8, cukup ini:
Kemudian cukup beralih pada kunci dan nilai objek:
sumber
Saya membuat fungsi rekursif kecil yang melewati seluruh objek json dan menyimpan jalur kunci dan nilainya.
sumber
Dengan Java 8 dan lambda, pembersih:
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#forEachRemaining-java.util.function.Consumer-
sumber
Kami menggunakan serangkaian kode di bawah ini untuk beralih di atas
JSONObject
bidangsumber
Saya pernah punya json yang memiliki id yang perlu ditambah satu karena mereka diindeks 0 dan itu melanggar kenaikan otomatis Mysql.
Jadi untuk setiap objek saya menulis kode ini - mungkin dapat membantu seseorang:
pemakaian:
ini dapat diubah untuk bekerja untuk JSONArray sebagai objek induk juga
sumber
Sebagian besar jawaban di sini adalah untuk struktur JSON datar, jika Anda memiliki JSON yang mungkin telah menyarangkan JSONArrays atau Nested JSONObjects, kompleksitas sebenarnya muncul. Cuplikan kode berikut menangani persyaratan bisnis seperti itu. Dibutuhkan peta hash, dan JSON hirarkis dengan JSONArrays bersarang dan JSONObjek dan memperbarui JSON dengan data di peta hash
Anda harus memperhatikan di sini bahwa tipe kembalinya ini batal, tetapi objek-objek sice dilewatkan sebagai rujukan perubahan ini dipantulkan kembali ke penelepon.
sumber
Kode di bawah ini berfungsi dengan baik untuk saya. Tolong bantu saya jika penyetelan bisa dilakukan. Ini mendapatkan semua kunci bahkan dari objek JSON bersarang.
sumber
Ini adalah solusi lain untuk masalah ini:
sumber