Android ListView veri bağlama için JSON Dizisini normal Java Dizisine dönüştürmenin bir yolu var mı?
Android ListView veri bağlama için JSON Dizisini normal Java Dizisine dönüştürmenin bir yolu var mı?
Yanıtlar:
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)
Null döndürürse ne olur (bunu ayrıştırmanın bir sonucu olarak :) [ "String 1", null, "String 2" ]
? O zaman for-loop çökmez mi?
size()
Bunun yerine uygulamaya bağlı olarak ihtiyacınız olabilir length()
.
Zaten bir JSONArray nesneniz yoksa,
JSONArray jsonArray = new JSONArray(jsonArrayString);
Ardından, kendi dizinizi oluşturarak bunun üzerinden dönün. Bu kod, onun bir dizi dizisi olduğunu varsayar, belirli dizi yapınıza uyacak şekilde değiştirmek zor olmamalıdır.
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
}
Belki bu yalnızca bir geçici çözümdür (çok verimli değildir), ancak şöyle bir şey yapabilirsiniz:
String[] resultingArray = yourJSONarray.join(",").split(",");
Açıkçası ' ,
' ayırıcısını istediğiniz herhangi bir şeyle değiştirebilirsiniz JSONArray
(e-posta adresim vardı )
Şunu kullanmak, bir String[]
yerine a kullanabilir ArrayList<String>
:
Bir ArrayList'in sahip olduğu bellek ek yükünü azaltacaktır.
Umarım yardımcı olur!
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
parametersArray[i] = parametersJSONArray.getString(i);
}
Java Akışlarını kullanarak, yalnızca IntStream
nesnelerin eşlemesini kullanabilirsiniz :
JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
.mapToObj(array::get)
.map(Object::toString)
.collect(Collectors.toList());
Bu sorunun JSONArray ile ilgili olduğunu biliyorum, ancak burada örnek JSONObject'ten nesneleri ayıklamak için JSONArray kullanmanız gerekmediğinde faydalı buldum.
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);
}
}
Dizge dizisi ile de çalışır
İşte bunu yapmanın daha iyi bir yolu: verileri API'den alıyorsanız. Ardından JSON'u PARSE ve liste görünümünüze yükleyin:
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();
...
dönüşümden başlıyoruz [JSONArray -> Liste <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;
}
daha sonra, array.getJSONObject (i ++) 'yi POJO ile değiştirerek genel sürüm oluşturun
misal :
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;
}
Bir String[]
yerine a kullanabilirsiniz ArrayList<String>
:
Umarım yardımcı olur!
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;
}
JSON'u okunabilir dizgeye dönüştürebilir ve String sınıfının "split" yöntemini kullanarak bölebiliriz.
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("\",\"");
Sorunun bunun için olduğunu biliyorum Java
. Ancak olası bir çözümü paylaşmak istiyorum Kotlin
çünkü bunun faydalı olduğunu düşünüyorum.
Kotlin ile JSONArray
, bir yerel (Kotlin) dizisine dönüştüren bir uzantı işlevi yazabilirsiniz :
fun JSONArray.asArray(): Array<Any> {
return Array(this.length()) { this[it] }
}
Artık asArray()
doğrudan bir JSONArray
örneğe çağrı yapabilirsiniz .
Java.util.Arrays kullanmaya ne dersiniz?
List<String> list = Arrays.asList((String[])jsonArray.toArray())
toArray()
yöntem göremiyorum JSONArray()
. json.org/javadoc/org/json/JSONArray.html Basit olsaydı bu soru muhtemelen sorulmazdı toArray()
.
org.JSONArray
kaputun altında bir ArrayList ... kullanırThe arrayList where the JSONArray's properties are kept
, böylece en (sadece encapsulation'ı) birçok durumda hiçbir şey için yapılır loop