Yang lucu adalah bahwa org.JSONArraymenggunakan ArrayList di bawah tenda ... The arrayList where the JSONArray's properties are kept, sehingga sebagian besar perulangan dilakukan tanpa alasan dalam banyak kasus (hanya untuk enkapsulasi)
Christophe Roussy
Jawaban:
186
ArrayList<String> list =newArrayList<String>();JSONArray jsonArray =(JSONArray)jsonObject;if(jsonArray !=null){int len = jsonArray.length();for(int i=0;i<len;i++){
list.add(jsonArray.get(i).toString());}}
untuk loop tidak ada tanda kurung tutup ... mencoba mengedit tetapi tidak cukup karakter untuk melewati persetujuan. Baiklah! hanya FYI.
Matt K
itz tidak hilang sebenarnya, penjawab hanya menyisipkan sepotong kode dengan kurung buka dan tutup fungsi.
Sarim Javaid Khan
1
Apa yang terjadi jika jsonArray.get(i)pengembalian nol (sebagai akibat dari penguraian ini:) [ "String 1", null, "String 2" ]? Bukankah for-loop Anda rusak?
dbm
Terima kasih. Jika seseorang memiliki sring maka JSONArray dapat dibuat sebagai JSONArray jsonArray = JSONArray baru (yourString); sisa kode akan tetap sama.
Kaushik Lele
Tergantung pada pelaksanaan Anda mungkin perlu size()bukan length().
Maka cukup loop melalui itu, membangun array Anda sendiri. Kode ini menganggap itu adalah array dari string, seharusnya tidak sulit untuk dimodifikasi agar sesuai dengan struktur array khusus Anda.
List<String> list =newArrayList<String>();for(int i=0; i<jsonArray.length(); i++){
list.add( jsonArray.getString(i));}
Saya tahu pertanyaan itu adalah tentang JSONArray tapi inilah contoh yang saya temukan berguna di mana Anda tidak perlu menggunakan JSONArray untuk mengekstrak objek dari JSONObject.
import org.json.simple.JSONObject;import org.json.simple.JSONValue;String jsonStr ="{\"types\":[1, 2]}";JSONObject json =(JSONObject)JSONValue.parse(jsonStr);List<Long> list =(List<Long>) json.get("types");if(list !=null){for(Long s : list){System.out.println(s);}}
kita mulai dari konversi [JSONArray -> Daftar <JSONObject>]
publicstaticList<JSONObject> getJSONObjectListFromJSONArray(JSONArray array)throwsJSONException{ArrayList<JSONObject> jsonObjects =newArrayList<>();for(int i =0;
i <(array !=null? array.length():0);
jsonObjects.add(array.getJSONObject(i++)));return jsonObjects;}
selanjutnya buat versi generik menggantikan array.getJSONObject (i ++) dengan POJO
contoh:
public<T>staticList<T> getJSONObjectListFromJSONArray(Class<T> forClass,JSONArray array)throwsJSONException{ArrayList<Tt> tObjects =newArrayList<>();for(int i =0;
i <(array !=null? array.length():0);
tObjects.add((T) createT(forClass, array.getJSONObject(i++))));return tObjects;}privatestatic T createT(Class<T> forCLass,JSONObject jObject){// instantiate via reflection / use constructor or whatsoever
T tObject = forClass.newInstance();// if not using constuctor args fill up // // return new pojo filled object return tObject;}
Kita cukup mengonversi JSON menjadi string yang dapat dibaca, dan membaginya menggunakan metode "split" dari kelas String.
String jsonAsString = yourJsonArray.toString();//we need to remove the leading and the ending quotes and square brackets
jsonAsString = jsonAsString.substring(2, jsonAsString.length()-2);//split wherever the String contains ","String[] jsonAsStringArray = jsonAsString.split("\",\"");
Saya tidak melihat toArray()metode dalam JSONArray()dokumen. json.org/javadoc/org/json/JSONArray.html Pertanyaan ini mungkin tidak akan ditanyakan jika ada yang sederhana toArray().
javajavajavajavajava
1
net.sf.json.JSONArray memiliki metode toArray () sehingga respons ini berfungsi untuk pustaka JSON ini. Pertanyaannya tidak menentukan perpustakaan yang digunakan.
org.JSONArray
menggunakan ArrayList di bawah tenda ...The arrayList where the JSONArray's properties are kept
, sehingga sebagian besar perulangan dilakukan tanpa alasan dalam banyak kasus (hanya untuk enkapsulasi)Jawaban:
sumber
jsonArray.get(i)
pengembalian nol (sebagai akibat dari penguraian ini:)[ "String 1", null, "String 2" ]
? Bukankah for-loop Anda rusak?size()
bukanlength()
.Jika Anda belum memiliki objek JSONArray, hubungi
Maka cukup loop melalui itu, membangun array Anda sendiri. Kode ini menganggap itu adalah array dari string, seharusnya tidak sulit untuk dimodifikasi agar sesuai dengan struktur array khusus Anda.
sumber
Alih-alih menggunakan bundled-in
org.json
library, coba gunakan Jackson atau GSON, di mana ini adalah satu-liner. Dengan Jackson, f.ex:sumber
Mungkin ini hanya solusi (tidak sangat efisien) tetapi Anda dapat melakukan sesuatu seperti ini:
String[] resultingArray = yourJSONarray.join(",").split(",");
Jelas Anda dapat mengubah
,
pemisah ' ' dengan apa pun yang Anda suka (saya punyaJSONArray
alamat email)sumber
Gunakan dapat menggunakan
String[]
bukanArrayList<String>
:Ini akan mengurangi overhead memori yang dimiliki ArrayList
Semoga ini bisa membantu!
sumber
Menggunakan Java Streaming Anda cukup menggunakan
IntStream
pemetaan objek:sumber
Saya tahu pertanyaan itu adalah tentang JSONArray tapi inilah contoh yang saya temukan berguna di mana Anda tidak perlu menggunakan JSONArray untuk mengekstrak objek dari JSONObject.
Bekerja juga dengan berbagai string
sumber
Berikut ini cara yang lebih baik untuk melakukannya: jika Anda mendapatkan data dari API. Kemudian PARSE the JSON dan memuatnya ke listview Anda:
sumber
kita mulai dari konversi [JSONArray -> Daftar <JSONObject>]
selanjutnya buat versi generik menggantikan array.getJSONObject (i ++) dengan POJO
contoh:
sumber
Anda dapat menggunakan
String[]
alih - alihArrayList<String>
:Semoga ini bisa membantu!
sumber
sumber
Kita cukup mengonversi JSON menjadi string yang dapat dibaca, dan membaginya menggunakan metode "split" dari kelas String.
sumber
Saya tahu bahwa pertanyaan itu untuk
Java
. Tetapi saya ingin membagikan solusi yang mungkinKotlin
karena saya pikir ini berguna.Dengan Kotlin Anda dapat menulis fungsi ekstensi yang mengubah
JSONArray
array menjadi asli (Kotlin):Sekarang Anda dapat menelepon
asArray()
langsung melaluiJSONArray
instance.sumber
Bagaimana dengan menggunakan java.util.Arrays?
sumber
toArray()
metode dalamJSONArray()
dokumen. json.org/javadoc/org/json/JSONArray.html Pertanyaan ini mungkin tidak akan ditanyakan jika ada yang sederhanatoArray()
.