অ্যান্ড্রয়েড তালিকাভুক্ত ডেটা বন্ডিংয়ের জন্য কি জেএসএন অ্যারেটিকে সাধারণ জাভা অ্যারে রূপান্তর করার কোনও উপায় আছে?
অ্যান্ড্রয়েড তালিকাভুক্ত ডেটা বন্ডিংয়ের জন্য কি জেএসএন অ্যারেটিকে সাধারণ জাভা অ্যারে রূপান্তর করার কোনও উপায় আছে?
উত্তর:
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>
:
এটি অ্যারেলিস্টের মেমরির ওভারহেডকে হ্রাস করবে
আশা করি এটা সাহায্য করবে!
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 সম্পর্কে but তবে এখানে উদাহরণটি আমি কার্যকর পেয়েছি যেখানে আপনি 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();
...
আমরা রূপান্তর থেকে শুরু করছি [জেএসোনআরে -> তালিকা <জেএসএনওজেক্ট>]
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;
}
পরবর্তী জেনেরিক সংস্করণ তৈরি করুন অ্যারে প্রতিস্থাপন করুন
উদাহরণ:
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.Ararays ব্যবহার সম্পর্কে কীভাবে?
List<String> list = Arrays.asList((String[])jsonArray.toArray())
toArray()
পদ্ধতি দেখছি না JSONArray()
। json.org/javadoc/org/json/JSONArray.html এই প্রশ্নটি সম্ভবত জিজ্ঞাসা করা হত না যদি কোন সাধারণ ছিল কিনা toArray()
।
org.JSONArray
হুডের নীচে একটি অ্যারেলিস্ট ব্যবহার করে ...The arrayList where the JSONArray's properties are kept
তাই বেশিরভাগ লুপিং অনেক ক্ষেত্রেই কিছুই করা হয় না (কেবল এনক্যাপসুলেশনের জন্য)