জাসন অ্যারেটিকে সাধারণ জাভা তালিকায় রূপান্তর করুন


130

অ্যান্ড্রয়েড তালিকাভুক্ত ডেটা বন্ডিংয়ের জন্য কি জেএসএন অ্যারেটিকে সাধারণ জাভা অ্যারে রূপান্তর করার কোনও উপায় আছে?


8
মজার বিষয়টি org.JSONArrayহুডের নীচে একটি অ্যারেলিস্ট ব্যবহার করে ... The arrayList where the JSONArray's properties are keptতাই বেশিরভাগ লুপিং অনেক ক্ষেত্রেই কিছুই করা হয় না (কেবল এনক্যাপসুলেশনের জন্য)
ক্রিস্টোফ রাউসি

উত্তর:


186
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());
   } 
} 

5
লুপের জন্য বন্ধ হওয়া প্রথম বন্ধনী অনুপস্থিত ... সম্পাদনা করার চেষ্টা করা হয়েছে তবে অনুমোদনের পক্ষে এটি যথেষ্ট অক্ষর নয়। আচ্ছা ভালো! শুধু একটি এফওয়াইআই
ম্যাট কে

এটি আসলে অনুপস্থিত নয়, উত্তরদাতা কেবলমাত্র ফাংশনের খোলা এবং বন্ধ বন্ধনীগুলির সাথে কিছু সংখ্যক কোড পেস্ট করেছেন।
সারিম জাভেদ খান

1
নালার jsonArray.get(i)ফেরৎ পেলে কী ঘটে (এটি পার্স করার ফলে [ "String 1", null, "String 2" ]:)? তাহলে কি আপনার লুপ ক্রাশ হবে না?
dbm

ধন্যবাদ। যদি কোনওটির কাছে স্ট্রিং থাকে তবে JSONArray JSONArray jsonArray = নতুন JSONArray (আপনার স্ট্রিং) হিসাবে তৈরি করা যেতে পারে; কোড বাকি থাকবে।
কৌশিক লেলে

বাস্তবায়নের উপর নির্ভর করে আপনার size()পরিবর্তে প্রয়োজন হতে পারে length()
গিলিয়াম এফ।

57

আপনার যদি ইতিমধ্যে 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) );
}

2
দুঃখিত, আপনি ঠিক বলেছেন - আমি JSONArrays এর সাথে তালিকায় বিভ্রান্ত করছি :) এটি আসলে JSONArray.length ()।
নিক

13

বান্ডেল-ইন org.jsonলাইব্রেরি ব্যবহার না করে, জ্যাকসন বা জিএসওএন ব্যবহার করার চেষ্টা করুন, যেখানে এটি ওয়ান-লাইনার। জ্যাকসনের সাথে, f.ex:

List<String> list = new ObjectMapper().readValue(json, List.class);
// Or for array:
String[] array = mapper.readValue(json, String[].class);

11

হতে পারে এটি কেবলমাত্র এক কর্মক্ষেত্র (খুব দক্ষ নয়) তবে আপনি এরকম কিছু করতে পারেন:

String[] resultingArray = yourJSONarray.join(",").split(",");

স্পষ্টতই আপনি নিজের পছন্দমতো যে ,কোনও কিছু দিয়ে ' ' 'বিভক্তিকে পরিবর্তন করতে পারেন (আমার JSONArrayইমেল ঠিকানা ছিল)


8
নোট করুন যে আপনাকে অবশ্যই নিশ্চিত হতে হবে যে ডেটাতে আপনার বিভাজক চরটি নেই otherwise
আর্টেমিক্স

1
এবং ফলাফল একটি স্ট্রিং হতে হবে।
নিকোলাস টেলার 5

এক লাইনার, নিখুঁত।
জিশান

4

ব্যবহারের String[]পরিবর্তে একটি ব্যবহার করতে পারেন ArrayList<String>:

এটি অ্যারেলিস্টের মেমরির ওভারহেডকে হ্রাস করবে

আশা করি এটা সাহায্য করবে!

String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
    parametersArray[i] = parametersJSONArray.getString(i);
}

3

জাভা স্ট্রিম ব্যবহার করে আপনি কেবলমাত্র IntStreamঅবজেক্টগুলিকে একটি ম্যাপিং ব্যবহার করতে পারেন :

JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
        .mapToObj(array::get)
        .map(Object::toString)
        .collect(Collectors.toList());

0

আমি জানি যে প্রশ্নটি 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);
    }
}

স্ট্রিংগুলির অ্যারের সাথেও কাজ করে


0

এখানে এটি করার একটি আরও ভাল উপায়: আপনি যদি এপিআই থেকে ডেটা পান। তারপরে 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();

...

0

আমরা রূপান্তর থেকে শুরু করছি [জেএসোনআরে -> তালিকা <জেএসএনওজেক্ট>]

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;
}

0

আপনি এর 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;
        }

0

   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;
        }


0

আমরা কেবল 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("\",\"");

-2

আমি জানি যে প্রশ্নটি ছিল Java। তবে আমি এর জন্য একটি সম্ভাব্য সমাধান ভাগ করতে চাই Kotlinকারণ আমি মনে করি এটি কার্যকর।

কোটলিনের সাহায্যে আপনি একটি এক্সটেনশন ফাংশন লিখতে পারেন যা JSONArrayএটিকে একটি স্থানীয় (কোটলিন) অ্যারে রূপান্তর করে :

fun JSONArray.asArray(): Array<Any> {
    return Array(this.length()) { this[it] }
}

এখন আপনি asArray()সরাসরি একটি JSONArrayউদাহরণে কল করতে পারেন ।


-3

Java.util.Ararays ব্যবহার সম্পর্কে কীভাবে?

List<String> list = Arrays.asList((String[])jsonArray.toArray())

15
আমি ডক্সে কোনও toArray()পদ্ধতি দেখছি না JSONArray()json.org/javadoc/org/json/JSONArray.html এই প্রশ্নটি সম্ভবত জিজ্ঞাসা করা হত না যদি কোন সাধারণ ছিল কিনা toArray()
জাভাজাভবাভাভাভাভা

1
নেট.sf.json.JSONArray এর ToArray () পদ্ধতি রয়েছে তাই এই প্রতিক্রিয়াটি এই JSON লাইব্রেরির জন্য কাজ করে। প্রশ্নটি ব্যবহৃত গ্রন্থাগার নির্দিষ্ট করে নি।
ইলিংকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.