क्या एंड्रॉइड लिस्ट व्यू डेटा बाइंडिंग के लिए जेसन एरे को सामान्य जावा अर्रे में बदलने का एक तरीका है?
क्या एंड्रॉइड लिस्ट व्यू डेटा बाइंडिंग के लिए जेसन एरे को सामान्य जावा अर्रे में बदलने का एक तरीका है?
जवाबों:
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)रिटर्न अशक्त होता है (इसे पार्स करने के परिणामस्वरूप:) [ "String 1", null, "String 2" ]? तो अपने पाश दुर्घटना के लिए नहीं होगा?
size()इसके बजाय आवश्यकता हो सकती है length()।
यदि आपके पास पहले से ही JSONArray ऑब्जेक्ट नहीं है, तो कॉल करें
JSONArray jsonArray = new JSONArray(jsonArrayString);
तो बस उस के माध्यम से लूप, अपने खुद के सरणी का निर्माण। यह कोड मानता है कि यह स्ट्रिंग की एक सरणी है, यह आपके विशेष सरणी संरचना के अनुरूप संशोधित करने के लिए कठिन नहीं होना चाहिए।
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
}
शायद यह केवल एक वर्कअराउंड है (बहुत कुशल नहीं) लेकिन आप ऐसा कुछ कर सकते हैं:
String[] resultingArray = yourJSONarray.join(",").split(",");
स्पष्ट रूप से आप ' ,' विभाजक को अपनी पसंद की किसी भी चीज़ से बदल सकते हैं (मेरे पास JSONArrayईमेल पते हैं)
उपयोग के String[]बजाय एक का उपयोग कर सकते हैं ArrayList<String>:
यह मेमोरी ओवरहेड को कम कर देगा जो एक ArrayList के पास है
आशा करता हूँ की ये काम करेगा!
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
parametersArray[i] = parametersJSONArray.getString(i);
}
जावा स्ट्रीम का उपयोग करके आप केवल IntStreamवस्तुओं को मैप कर सकते हैं:
JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
.mapToObj(array::get)
.map(Object::toString)
.collect(Collectors.toList());
मुझे पता है कि सवाल JSONArray के बारे में है, लेकिन यहाँ उदाहरण मुझे उपयोगी लगा है जहाँ आपको JSONObject से ऑब्जेक्ट निकालने के लिए JSONArray का उपयोग करने की आवश्यकता नहीं है।
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);
}
}
तार के साथ भी काम करता है
यहां यह करने का एक बेहतर तरीका है: यदि आपको एपीआई से डेटा मिल रहा है। फिर JSON को पार्स करें और इसे अपनी सूची में लोड करें:
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();
...
हम रूपांतरण से शुरू कर रहे हैं [JSONArray -> सूची <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;
}
अगला POJO के साथ array.getJSONObject (i ++) की जगह जेनेरिक संस्करण बनाएं
उदाहरण :
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;
}
आप String[]इसके बजाय का उपयोग कर सकते हैं ArrayList<String>:
आशा करता हूँ की ये काम करेगा!
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 को पठनीय स्ट्रिंग में बदल सकते हैं, और स्ट्रिंग वर्ग की "स्प्लिट" विधि का उपयोग करके इसे विभाजित कर सकते हैं।
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("\",\"");
मुझे पता है कि प्रश्न के लिए था Java। लेकिन मैं एक संभावित समाधान साझा करना चाहता हूं Kotlinक्योंकि मुझे लगता है कि यह उपयोगी है।
कोटलिन के साथ आप एक एक्सटेंशन फ़ंक्शन लिख सकते हैं जो JSONArrayएक देशी (कोटलिन) सरणी में परिवर्तित होता है :
fun JSONArray.asArray(): Array<Any> {
return Array(this.length()) { this[it] }
}
अब आप asArray()एक JSONArrayउदाहरण पर सीधे कॉल कर सकते हैं ।
Java.util.Arrays का उपयोग कैसे करें?
List<String> list = Arrays.asList((String[])jsonArray.toArray())
toArray()में कोई विधि नहीं दिख रही है JSONArray()। json.org/javadoc/org/json/JSONArray.html यह सवाल शायद नहीं पूछा गया था कि क्या कोई सरल बात थी toArray()।
org.JSONArrayहुड के नीचे एक ArrayList का उपयोग करता है ...The arrayList where the JSONArray's properties are kept, इसलिए अधिकांश लूपिंग कई मामलों में कुछ भी नहीं करने के लिए किया जाता है (बस इनकैप्सुलेशन के लिए)