জেএসোনারাকে অ্যারেলিস্টে রূপান্তর করা


104

আমি একটি জেএসএন স্ট্রিং ডাউনলোড করে এটিকে জেএসএনআররে রূপান্তর করছি। আমি এটিকে একটি তালিকাভিউতে রাখছি এবং পরে সেই তালিকাটি থেকে মুছে ফেলতে সক্ষম হওয়া দরকার এবং জেএসোনআরির কোনও .রেম পদ্ধতি নেই (ধন্যবাদ ওবামা), তাই আমি এটিকে একটি অ্যারেলিস্টে রূপান্তর করার চেষ্টা করছি।

এখানে আমার জেএসএন (অ্যারে.টো স্ট্রিং ()) রয়েছে:

[{"thumb_url":"tb-1370913834.jpg","event_id":"15","count":"44","event_tagline":"this is a tagline","event_name":"5th birthday","event_end":"1370919600","event_start":"1370876400"}]

আমার এটি অ্যারেতে উঠতে হবে এবং তাদের নিজ নিজ কী দ্বারা স্ট্রিংগুলি কল করতে সক্ষম হব। কোন সাহায্যের প্রশংসা করুন!


আপনি কীগুলি বললে, এটি কোনও ধরণের অভিধান (অ্যান্ড্রয়েডে মানচিত্র) বোঝায় না? একটি অ্যারে সূচক ভিত্তিক হবে। কীভাবে তৈরি করবেন এবং কীভাবে ব্যবহার করবেন তার জন্য বিকাশকারী.এন্ড্রয়েড . com/ references/java/util/Map.html দেখুন ।
ব্রায়ানস্টে

কাস্টম বেসডাপ্টার দিয়ে একটি তালিকা মানচিত্র ব্যবহার করতে কি কোনও মানচিত্র ব্যবহার করা যেতে পারে? জেএসওএন কখনও আদেশ পরিবর্তন করলে আইডির পরিবর্তে সূচকগুলি ব্যবহার করবেন না।
TheGeekNess

তালিকাগুলি সূচী দ্বারা অ্যাডাপ্টার থেকে বস্তুগুলি পাবে, সুতরাং যে কোনও ক্ষেত্রে আপনার তালিকাটি কিছু ক্রম বজায় রাখতে হবে। আপনি কীগুলির ক্রমটি বজায় রাখতে চান (এবং কীগুলি সংকলনের সময় কী রয়েছে তা জানতে পারেন), আপনি মানচিত্র থেকে আনার সময় সেই কীগুলির একটি অ্যারে আপনার পছন্দ অনুসারে ক্রম-কোড করতে পারেন এবং আপনার অর্ডার করার জন্য এটি ব্যবহার করতে পারেন।
ব্রায়ানস্টে

উত্তর:


164
ArrayList<String> listdata = new ArrayList<String>();     
JSONArray jArray = (JSONArray)jsonObject; 
if (jArray != null) { 
   for (int i=0;i<jArray.length();i++){ 
    listdata.add(jArray.getString(i));
   } 
} 

3
এবং listdata.add(jArray.optJSONObject(i));যদি আপনার তালিকাডেটটা কোনও JSONObject অ্যারেলিস্ট হয়। ArrayList<JSONObject> listdata = new ArrayList<JSONObject>();
সাবিন সেবাস্তিয়ান

2
ভাল স্নিপেট। যদি কেউ চান তবে: এমন একটি সহায়ক শ্রেণি রয়েছে যা জেএসনোবজেক্ট / জেএসনআরিকে গিথুব gist.github.com/codebutler/2339666
ইনেক্সিআই

2
কেন ব্যবহার করবেন না ArrayList<Object>?
নটনাভ্রা

আমি কীভাবে জসন অ্যারে হ্যান্ডেল করব তা খালি। আমাকে উত্তর দিন দয়া করে।
মোহনরাজ এস

3
লুপ ছাড়াই এটি করার অন্য কোনও উপায় আছে?
কে.সোফিয়াক

64

আমি এটি Gson(গুগল দ্বারা) ব্যবহার করে সম্পন্ন করেছি ।

আপনার মডিউলটির জন্য নিম্নলিখিত লাইনটি যুক্ত করুন build.gradle:

dependencies {
  // ...
  // Note that `compile` will be deprecated. Use `implementation` instead.
  // See https://stackoverflow.com/a/44409111 for more info
  implementation 'com.google.code.gson:gson:2.8.2'
}

JSON স্ট্রিং:

private String jsonString = "[\n" +
            "        {\n" +
            "                \"id\": \"c200\",\n" +
            "                \"name\": \"Ravi Tamada\",\n" +
            "                \"email\": \"ravi@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c201\",\n" +
            "                \"name\": \"Johnny Depp\",\n" +
            "                \"email\": \"johnny_depp@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c202\",\n" +
            "                \"name\": \"Leonardo Dicaprio\",\n" +
            "                \"email\": \"leonardo_dicaprio@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c203\",\n" +
            "                \"name\": \"John Wayne\",\n" +
            "                \"email\": \"john_wayne@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c204\",\n" +
            "                \"name\": \"Angelina Jolie\",\n" +
            "                \"email\": \"angelina_jolie@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"female\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c205\",\n" +
            "                \"name\": \"Dido\",\n" +
            "                \"email\": \"dido@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"female\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c206\",\n" +
            "                \"name\": \"Adele\",\n" +
            "                \"email\": \"adele@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"female\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c207\",\n" +
            "                \"name\": \"Hugh Jackman\",\n" +
            "                \"email\": \"hugh_jackman@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c208\",\n" +
            "                \"name\": \"Will Smith\",\n" +
            "                \"email\": \"will_smith@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c209\",\n" +
            "                \"name\": \"Clint Eastwood\",\n" +
            "                \"email\": \"clint_eastwood@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c2010\",\n" +
            "                \"name\": \"Barack Obama\",\n" +
            "                \"email\": \"barack_obama@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c2011\",\n" +
            "                \"name\": \"Kate Winslet\",\n" +
            "                \"email\": \"kate_winslet@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"female\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        },\n" +
            "        {\n" +
            "                \"id\": \"c2012\",\n" +
            "                \"name\": \"Eminem\",\n" +
            "                \"email\": \"eminem@gmail.com\",\n" +
            "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
            "                \"gender\" : \"male\",\n" +
            "                \"phone\": {\n" +
            "                    \"mobile\": \"+91 0000000000\",\n" +
            "                    \"home\": \"00 000000\",\n" +
            "                    \"office\": \"00 000000\"\n" +
            "                }\n" +
            "        }\n" +
            "    ]";

ContactModel.java:

public class ContactModel {
     public String id;
     public String name;
     public String email;
}

একটি JSON স্ট্রিং এ রূপান্তর করার কোড ArrayList<Model>:

দ্রষ্টব্য: আপনাকে আমদানি করতে হবে java.lang.reflect.Type;:

// Top of file
import java.lang.reflect.Type;

// ...

private void parseJSON() {
    Gson gson = new Gson();
    Type type = new TypeToken<List<ContactModel>>(){}.getType();
    List<ContactModel> contactList = gson.fromJson(jsonString, type);
    for (ContactModel contact : contactList){
        Log.i("Contact Details", contact.id + "-" + contact.name + "-" + contact.email);
    }
}

আশা করি এটা তোমাকে সাহায্য করবে।


4
তিনটি লাইন ... সম্পন্ন! আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ছিল (ক) এটি কেবলমাত্র তিনটি লাইনের কোড যা সুন্দরভাবে কাজ করে এবং (খ) কয়েকটি উত্তর আসলে জেএসএনআরাই থেকে তালিকা <কাস্টমঅবজেক্ট> এ টাইপিত অনুবাদ সম্পাদন করে। ধন্যবাদ!
জন ওয়ার্ড

এটি অবশ্যই একটি JSONArray হতে হবে, JSONElement কার্যকর মনে হচ্ছে না। সুতরাং, getAsJsonArray()পদ্ধতিটি উপস্থিতভাবে ব্যবহার করুন । ধন্যবাদ!
恒 陶

1
ঠিক আমার যা প্রয়োজন, ধন্যবাদ! দ্রষ্টব্য: আপনার এগুলি আমদানি করতে হবে: java.lang.reflect.Type; com.google.gson.reflect.TypeToken;
চন্দ্রানী এইচ

আশ্চর্যজনক, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত! ধন্যবাদ
ইয়েউনি

এটি টাইপোটোকেনের দীক্ষা সুরক্ষিত বলে কাজ করে না
নিকোসোস

7

আপনার নিজের অ্যারে তৈরি করে কেবল এটির মধ্য দিয়ে লুপ করুন। এই কোডটি ধরে নিয়েছে এটি স্ট্রিংগুলির একটি অ্যারে, আপনার নির্দিষ্ট অ্যারে কাঠামোর সাথে মানানসই পরিবর্তন করা শক্ত হবে না।

JSONArray jsonArray = new JSONArray(jsonArrayString);
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
    list.add( jsonArray.getString(i) );

6

JSON স্ট্রিংটিকে একটি অ্যারেলিস্ট বা একটি মানচিত্রে রূপান্তরিত করার পরিবর্তে আপনি কেবল একটি JSONObject নিজেই তৈরি করতে পারেন । আপনি চান হিসাবে এবং অবজেক্টগুলি অপসারণ করার জন্য এই বস্তুর কী দ্বারা স্ট্রিং মানগুলি পাওয়ার ক্ষমতা রয়েছে ।

JSONObjectসঠিকভাবে ফর্ম্যাটেড JSON স্ট্রিং থেকে একটি তৈরি করতে , আপনি কেবল উপযুক্ত কনস্ট্রাক্টরকে কল করেন ।

JSONObject json = new JSONObject(jsonString);

1
আমি বিশেষত এই সমাধানটির সাথে যে সমস্যাটি নিয়ে চলেছি তা হ'ল জেএসওনোবজেক্ট এবং জসোনআরয়ের সাথে কাজ করার সময় তারা জেএসওএনএক্সসেপশনকে ফেলে দেয়। কখনও কখনও JSONArray এর বিষয়বস্তু এমন কোনও ফাংশনে প্রেরণ করা সহজ যা JSON সম্পর্কে সচেতন হওয়া উচিত নয়।
হারুন ডগের্টি

2
আমি রাজী. আমি জেএসএনওবজেক্টটিকে ব্যবহারযোগ্য মডেল অবজেক্টে জেএসওএন পাঠ্য ভাগ করার অংশ হিসাবে ব্যবহার করব। উত্থাপিত যে কোনও JSONException উত্স JSON এর সাথে কোনও সমস্যা নির্দেশ করবে, যার অর্থ আপনি এটিকে JSONArray বা JSONObject এ পার্স করতে পারবেন না, আলাদা মডেল অবজেক্টটিকে ছেড়ে দিন।
ব্রায়ানস্টে

6

আমার দ্রুত সমাধান আছে। শুধু একটি ফাইল তৈরি করুনArrayUtil.java

import java.util.ArrayList;
import java.util.Collection;
import org.json.JSONArray;
import org.json.JSONException;

public class ArrayUtil
{
    public static ArrayList<Object> convert(JSONArray jArr)
    {
        ArrayList<Object> list = new ArrayList<Object>();
        try {
            for (int i=0, l=jArr.length(); i<l; i++){
                 list.add(jArr.get(i));
            }
        } catch (JSONException e) {}

        return list;
    }

    public static JSONArray convert(Collection<Object> list)
    {
        return new JSONArray(list);
    }

}

ব্যবহার:

ArrayList<Object> list = ArrayUtil.convert(jArray);

অথবা

JSONArray jArr = ArrayUtil.convert(list);

Wha আমি কি একটি ফিরতি করার প্রয়োজন হলেArrayList<String>

আমি মনে করি অ্যারেলিস্ট <অবজেক্ট>
অ্যারেলিস্টে প্রকাশ করা

1
এই উত্তর কুদোস। তুমি আমার দিনটা সমাধান করে দিয়েছ! আমি এটি ঠিক করার চেষ্টা করে 2 ঘন্টা ব্যয় করেছি। আসলে আমার সমস্যা আমি রূপান্তরিত লাগাতে চেয়েছিল ছিল JSONArrayএকটি তালিকায় তাই আমি করা হতে পারে Listএকটি HashMap, তাই এই util চমত্কার আমার জন্য কাজ করেন। ধন্যবাদ @ ভ্যাসিলি সুরিকভ
জোস

5

জাভা 8 এ,

IntStream.range(0,jsonArray.length()).mapToObj(i->jsonArray.getString(i)).collect(Collectors.toList())

1
এর সাথে একমাত্র সমস্যা হ'ল JSONArray.getString (...) একটি ব্যতিক্রম ছুঁড়ে যা ম্যাপিংয়ের অভ্যন্তরে পরিচালনা করতে হয়, তাই আপনি শেষ করেন List<String> listOfStrings = IntStream.range(0, array.length()).mapToObj(i -> { try { return array.getString(i); } catch (JSONException e) { throw new AssertionFailedError("JSONArray is not a list of Strings! " + e.getMessage()); } }).collect(Collectors.toList());যা আর কোনও মার্জিত নয়। সুতরাং আমি একটি
ভবিষ্যদ্বাণী

এটি এখানে সেরা উত্তর (ইমো) তবে যদি একবারের জন্য jsonArray রেফারেন্স অ্যাক্সেস না করার উপায় ছিল তবে মার্জিত হবে।
jangofan


2

এটি সহজ করতে, POJO ব্যবহার করুন।

এইভাবে চেষ্টা করুন ..

List<YourPojoObject> yourPojos = new ArrayList<YourPojoObject>();

JSONObject jsonObject = new JSONObject(jsonString);
YourPojoObject yourPojo = new YourPojoObject();
yourPojo.setId(jsonObject.getString("idName"));
...
...

yourPojos.add(yourPojo);

1

গসন ব্যবহার করে

    List<Student> students = new ArrayList<>();
    JSONArray jsonArray = new JSONArray(stringJsonContainArray);
    for (int i = 0; i < jsonArray.length(); i++) {
        Student student = new Gson().fromJson(jsonArray.get(i).toString(), Student.class);
        students.add(student);
    }
    return students;

1

আপনি যদি JSON স্ট্রিং অ্যারের ডেটা ফর্মটি বের করতে চান তবে আমার ওয়ার্কিং কোডটি এখানে। আপনার ডেটা হিসাবে পরামিতি পরিবর্তন করুন।


পোজো ক্লাস

public class AllAppModel {
    private String appName;
    private String packageName;
    private int uid;
    private boolean isSelected;
    private boolean isSystemApp;
    private boolean isFav;
}

কোডের নীচে লাইন ব্যবহার করে আপনার ডেটা বের করুন

try {
    JSONArray jsonArr = new JSONArray("Your json string array");
    List<AllAppModel> lstExtrextData = new ArrayList<>();
    for (int i = 0; i < jsonArr.length(); i++) {
        JSONObject jsonObj = jsonArr.getJSONObject(i);
        AllAppModel data = new AllAppModel();
        data.setAppName(jsonObj.getString("appName"));
        data.setPackageName(jsonObj.getString("packageName"));
        data.setUid(jsonObj.getInt("uid"));
        data.setSelected(jsonObj.getBoolean("isSelected"));
        data.setSystemApp(jsonObj.getBoolean("isSystemApp"));
        data.setFav(jsonObj.getBoolean("isFav"));
        lstExtrextData.add(data);
    }
} catch (JSONException e) {
    e.printStackTrace();
}

এটি আপনাকে PoJo বর্গ অবজেক্টের তালিকা ফিরিয়ে দেবে।


1

জাভা 8 স্টাইল

   JSONArray data = jsonObject.getJSONArray("some-node");

   List<JSONObject> list = StreamSupport.stream(data.spliterator(), false)
                .map(e -> (JSONObject)e)
                .collect(Collectors.toList());

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

0

আমার দ্রুত সমাধান আছে। শুধু একটি ফাইল তৈরি করুনArrayUtil.java

ObjectMapper mapper = new ObjectMapper(); 
List<Student> list = Arrays.asList(mapper.readValue(jsonString, Student[].class));

ব্যবহার:

ArrayList<Object> list = ArrayUtil.convert(jArray);

অথবা

JSONArray jArr = ArrayUtil.convert(list);

0

জেনেরিক বৈকল্পিক

public static <T> List<T> getList(JSONArray jsonArray) throws Exception {

    List<T> list = new ArrayList<>(jsonArray.length());

    for (int i = 0; i < jsonArray.length(); i++) {

        list.add((T)jsonArray.get(i));
    }

    return list;

}

//Usage

List<String> listKeyString = getList(dataJsonObject.getJSONArray("keyString"));


0

থ্রেডের মূল বিষয়টি নিয়ে চলছে:

জসোনারাকে তালিকায় রূপান্তর করা (ব্যবহৃত জ্যাকসন জসোনারে এবং অবজেক্ট ম্যাপার এখানে):

ObjectMapper mapper = new ObjectMapper();
JSONArray array = new JSONArray();
array.put("IND");
array.put("CHN");
List<String> list = mapper.readValue(array.toString(), List.class);

0

একটি সহজ জাভা 8 বিকল্প:

JSONArray data = new JSONArray(); //create data from this -> [{"thumb_url":"tb-1370913834.jpg","event_id":...}]

List<JSONObject> list = data.stream().map(o -> (JSONObject) o).collect(Collectors.toList());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.