Apakah ada cara untuk mengkonversi JSON Array ke Java Array normal untuk pengikatan data ListView android?
Apakah ada cara untuk mengkonversi JSON Array ke Java Array normal untuk pengikatan data ListView android?
Jawaban:
ArrayList<String> list = new ArrayList<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());
}
}
jsonArray.get(i)
pengembalian nol (sebagai akibat dari penguraian ini:) [ "String 1", null, "String 2" ]
? Bukankah for-loop Anda rusak?
size()
bukan length()
.
Jika Anda belum memiliki objek JSONArray, hubungi
JSONArray jsonArray = new JSONArray(jsonArrayString);
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 = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
}
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 punya JSONArray
alamat email)
Gunakan dapat menggunakan String[]
bukan ArrayList<String>
:
Ini akan mengurangi overhead memori yang dimiliki ArrayList
Semoga ini bisa membantu!
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
parametersArray[i] = parametersJSONArray.getString(i);
}
Menggunakan Java Streaming Anda cukup menggunakan IntStream
pemetaan objek:
JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
.mapToObj(array::get)
.map(Object::toString)
.collect(Collectors.toList());
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);
}
}
Bekerja juga dengan berbagai string
Berikut ini cara yang lebih baik untuk melakukannya: jika Anda mendapatkan data dari API. Kemudian PARSE the JSON dan memuatnya ke listview Anda:
protected void onPostExecute(String result) {
Log.v(TAG + " result);
if (!result.equals("")) {
// Set up variables for API Call
ArrayList<String> list = new ArrayList<String>();
try {
JSONArray jsonArray = new JSONArray(result);
for (int i = 0; i < jsonArray.length(); i++) {
list.add(jsonArray.get(i).toString());
}//end for
} catch (JSONException e) {
Log.e(TAG, "onPostExecute > Try > JSONException => " + e);
e.printStackTrace();
}
adapter = new ArrayAdapter<String>(ListViewData.this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ListView Clicked item index
int itemPosition = position;
// ListView Clicked item value
String itemValue = (String) listView.getItemAtPosition(position);
// Show Alert
Toast.makeText( ListViewData.this, "Position :" + itemPosition + " ListItem : " + itemValue, Toast.LENGTH_LONG).show();
}
});
adapter.notifyDataSetChanged();
adapter.notifyDataSetChanged();
...
kita mulai dari konversi [JSONArray -> Daftar <JSONObject>]
public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array)
throws JSONException {
ArrayList<JSONObject> jsonObjects = new ArrayList<>();
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> static List<T> getJSONObjectListFromJSONArray(Class<T> forClass, JSONArray array)
throws JSONException {
ArrayList<Tt> tObjects = new ArrayList<>();
for (int i = 0;
i < (array != null ? array.length() : 0);
tObjects.add( (T) createT(forClass, array.getJSONObject(i++)))
);
return tObjects;
}
private static 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;
}
Anda dapat menggunakan String[]
alih - alih ArrayList<String>
:
Semoga ini bisa membantu!
private String[] getStringArray(JSONArray jsonArray) throws JSONException {
if (jsonArray != null) {
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
stringsArray[i] = jsonArray.getString(i);
}
return stringsArray;
} else
return null;
}
private String[] getStringArray(JSONArray jsonArray) throws JSONException {
if (jsonArray != null) {
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
stringsArray[i] = jsonArray.getString(i);
}
return stringsArray;
} else
return null;
}
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 tahu bahwa pertanyaan itu untuk Java
. Tetapi saya ingin membagikan solusi yang mungkin Kotlin
karena saya pikir ini berguna.
Dengan Kotlin Anda dapat menulis fungsi ekstensi yang mengubah JSONArray
array menjadi asli (Kotlin):
fun JSONArray.asArray(): Array<Any> {
return Array(this.length()) { this[it] }
}
Sekarang Anda dapat menelepon asArray()
langsung melalui JSONArray
instance.
Bagaimana dengan menggunakan java.util.Arrays?
List<String> list = Arrays.asList((String[])jsonArray.toArray())
toArray()
metode dalam JSONArray()
dokumen. json.org/javadoc/org/json/JSONArray.html Pertanyaan ini mungkin tidak akan ditanyakan jika ada yang sederhana toArray()
.
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)