অ্যারেলিস্ট <মাইকাস্টমক্লাস> কে JSONArray এ রূপান্তর করুন


115

আমার কাছে একটি অ্যারেলিস্ট রয়েছে যা আমি একটি তালিকা ভিউয়ের জন্য একটি অ্যারেএডাপ্টারের মধ্যে ব্যবহার করি। আমাকে তালিকার আইটেমগুলি নিয়ে একটি এপিআইতে প্রেরণের জন্য এগুলি JSONArray এ রূপান্তর করতে হবে। আমি আশেপাশে অনুসন্ধান করেছি, কিন্তু এমন কোনও কিছুই খুঁজে পাইনি যা ব্যাখ্যা করে যে এটি কীভাবে কাজ করতে পারে, কোনও সাহায্যের প্রশংসা করা হবে।

আপডেট - সমাধান

সমস্যাটি সমাধান করার জন্য আমি এখানে কি শেষ করেছি।

অ্যারেলিস্টে অবজেক্ট:

public class ListItem {
    private long _masterId;
    private String _name;
    private long _category;

    public ListItem(long masterId, String name, long category) {
        _masterId = masterId;
        _name = name;
        _category = category;
    }

    public JSONObject getJSONObject() {
        JSONObject obj = new JSONObject();
        try {
            obj.put("Id", _masterId);
            obj.put("Name", _name);
            obj.put("Category", _category);
        } catch (JSONException e) {
            trace("DefaultListItem.toString JSONException: "+e.getMessage());
        }
        return obj;
    }
}

এখানে আমি এটি রূপান্তর করেছি:

ArrayList<ListItem> myCustomList = .... // list filled with objects
JSONArray jsonArray = new JSONArray();
for (int i=0; i < myCustomList.size(); i++) {
        jsonArray.put(myCustomList.get(i).getJSONObject());
}

এবং আউটপুট:

[{"Name":"Name 1","Id":0,"Category":"category 1"},{"Name":"Name 2","Id":1,"Category":"category 2"},{"Name":"Name 3","Id":2,"Category":"category 3"}]

আশা করি এটি কোনও দিন কাউকে সাহায্য করবে!

উত্তর:


115

আমি যদি JSONArrey নির্মাণকারীকে সঠিকভাবে পড়ি তবে আপনি এগুলি যে কোনও সংগ্রহ থেকে সংগ্রহ করতে পারেন (অ্যারেলিস্ট সংগ্রহের একটি সাবক্লাস) এর মতো:

ArrayList<String> list = new ArrayList<String>();
list.add("foo");
list.add("baar");
JSONArray jsArray = new JSONArray(list);

তথ্যসূত্র:


3
এটি আপনার উদাহরণে কাজ করে তবে আমার মধ্যে অ্যারেলিস্টটি অবজেক্ট নিয়ে গঠিত এবং স্ট্রিংস নয় - অনুমান করুন আমার প্রশ্নটিতে আমার এটি রাখা উচিত ছিল। আমি মনে করি এটি সঠিক দিক, তবে এটি সঠিকভাবে কাজ করতে আমার ক্লাসে টু স্ট্রিংকে ওভাররাইডের প্রয়োজন হতে পারে।
pmko

1
আপনি সর্বদা আপনার তালিকাটি লুপ করতে পারেন এবং এর জন্য jsArray.put () ব্যবহার করতে পারেন। শেষ পর্যন্ত আপনার অবজেক্টগুলির একটি JSONArray এ রূপান্তরিত করার জন্য তাদের কাছে একটি স্ট্রিং পদ্ধতি থাকা উচিত বলে আমি মনে করি, কারণ সেগুলি এক হিসাবে সংরক্ষিত হবে।
Nanne

3
এটি আমার কাছাকাছি পৌঁছেছিল, তবে যা ঘটেছিল তা প্রতিটি স্ট্রাক্টের টসস্ট্রিং () আউটপুটটি স্ট্রিং হিসাবে JSONArray তে intoোকানো হয়েছিল। আমি এখনও স্ট্রিংসের একটি JSONArray দিয়ে শেষ করেছি এবং অবজেক্টস নয়। আমি আমার ক্লাসে getJSONObject নামে একটি পদ্ধতি তৈরি করে শেষ করেছি, তারপরে অ্যারেলিস্টের উপরে লুপ করেছি এবং এর ফলাফলটি JSONArray তে রেখেছি। আমাকে সঠিক পথে রাখার জন্য ধন্যবাদ আমি আপনার উত্তর গ্রহণ করতে যাচ্ছি এবং তারপরে আমি কী করে শেষ করেছি তার একটি কোড নমুনা পোস্ট করব। আমি আশা করি এটি খুব ভাল শিষ্টাচার নয়।
pmko

64

অ্যারেলিস্টকে জসনআরে রূপান্তর করতে গসন লাইব্রেরি ব্যবহার করুন।

Gson gson = new GsonBuilder().create();
JsonArray myCustomArray = gson.toJsonTree(myCustomList).getAsJsonArray();

5
ওপি যেমন চেয়েছিল এটি কোনও org.json.JSONArray নয়, এটি একটি com.google.gson.JsonArray।
নিমা

Gson.toJsonTree ব্যবহার করার সময় দায়ের করা আরও একটি আইডি সুগন্ধযুক্ত যুক্ত করা হয়। কীভাবে এটি প্রতিরোধ করা যায়।
হিতেশ কামানী

@ হিটেশকামণি এটি স্বয়ংক্রিয়ভাবে কোনও অতিরিক্ত আইডি যুক্ত করবে না, হতে পারে আপনার শ্রেণিতে আইডি ক্ষেত্র রয়েছে।
পুরুষোথম

এটি আসলে কাজের উপর নির্ভর করে। অ্যান্ড্রয়েড এসডিকে নিজেই উপযুক্ত করতে পারে এমন কাজগুলি করার জন্য সাধারণত পুরো বাহ্যিক গ্রন্থাগার অন্তর্ভুক্ত নয় worth যদি আপনি প্রকল্পে 64 কে পদ্ধতির কিনারায় থাকেন তবে এস্পেশিয়ালি।
ম্যাক্সিম বেরেজভস্কি

1
হাই উচ্চতম দুর্দান্ত সমাধান মাত্র একটি দ্রুত বিষয় এটি অ্যারেলিস্টের মধ্যে অ্যারেলিস্টকে জসন অ্যারে রূপান্তর করে না
আশিষ ভাটনগর

35

যেহেতু কেউ সনাক্ত করেছেন যে ওপি কাস্টম তালিকাকেorg.json.JSONArray নয় পরিবর্তিত করতে চায় com.google.gson.JsonArray, তাই সঠিক উত্তরটি হওয়া উচিত:

Gson gson = new Gson();

String listString = gson.toJson(
                    targetList,
           new TypeToken<ArrayList<targetListItem>>() {}.getType());

 JSONArray jsonArray =  new JSONArray(listString);

দুর্দান্ত :) আপনি নিখুঁত
প্রতীক বুটানি

এখানে @zionpi 2 লাইব্রেরি JSON অ্যারের করার জন্য একটি অ্যারের তালিকা রূপান্তর করতে ব্যবহার করা হচ্ছে
Purushotham

@ উটম আপনি এতে দুটি লিব ব্যবহৃত কোথায় দেখতে পাবেন?
রবি যাদব

টা যদি আমি সংশোধন JSONArray org.json পক্ষ থেকে হয় এবং Gson com.google.json থেকে
Purushotham

গাহ এই চেক ব্যতিক্রম নিক্ষেপ: JSONException। অন্যথায় সঠিক উত্তর এখানে।
বাবকেন বর্ধনিয়ান

5
public void itemListToJsonConvert(ArrayList<HashMap<String, String>> list) {

        JSONObject jResult = new JSONObject();// main object
        JSONArray jArray = new JSONArray();// /ItemDetail jsonArray

        for (int i = 0; i < list.size(); i++) {
            JSONObject jGroup = new JSONObject();// /sub Object

            try {
                jGroup.put("ItemMasterID", list.get(i).get("ItemMasterID"));
                jGroup.put("ID", list.get(i).get("id"));
                jGroup.put("Name", list.get(i).get("name"));
                jGroup.put("Category", list.get(i).get("category"));

                jArray.put(jGroup);

                // /itemDetail Name is JsonArray Name
                jResult.put("itemDetail", jArray);
                return jResult;
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    }

2
আমি অলস প্রোগ্রামার হওয়ার কারণগুলির এটি একটি। আমি এসওএফ থেকে জিনিসগুলি করার জন্য ক্যাপসুল আকারের কোড পাই। কপি পেস্ট করুন, এবং সবকিছু কাজ করে। ভাবছি যখন আমি এমন কোনও রোবট প্রতিস্থাপন করব যা ঠিক একই রকম হয় ...
সাবিন সেবাস্তিয়ান

1

আমি এর উত্তর ইতিমধ্যে জেনেছি, তবে এখানে এই কোডটি ব্যবহার করার একটি আরও ভাল সমাধান রয়েছে:

for ( Field f : context.getFields() ) {
     if ( f.getType() == String.class ) || ( f.getType() == String.class ) ) {
           //DO String To JSON
     }
     /// And so on...
}

এইভাবে আপনি ক্লাস থেকে ম্যানুয়ালি টাইপ না করে ভেরিয়েবল অ্যাক্সেস করতে পারবেন ..

দ্রুত এবং আরও ভাল .. আশা করি এটি সাহায্য করবে।

চিয়ার্স। : ডি


1

আপনার গ্রেড যোগ করুন:

implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

রূপান্তর ArrayListকরুনJsonArray

JsonArray jsonElements = (JsonArray) new Gson().toJsonTree(itemsArrayList);

0

কোটলিন এবং গসন দিয়ে আমরা এটি আরও সহজেই করতে পারি:

  1. প্রথমে, গসন নির্ভরতা যুক্ত করুন:

implementation "com.squareup.retrofit2:converter-gson:2.3.0"

  1. একটি পৃথক kotlinফাইল তৈরি করুন, নিম্নলিখিত পদ্ধতিগুলি যুক্ত করুন
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken

fun <T> Gson.convertToJsonString(t: T): String {
    return toJson(t).toString()
}

fun <T> Gson.convertToModel(jsonString: String, cls: Class<T>): T? {
    return try {
        fromJson(jsonString, cls)
    } catch (e: Exception) {
        null
    }
}

inline fun <reified T> Gson.fromJson(json: String) = this.fromJson<T>(json, object: TypeToken<T>() {}.type)

দ্রষ্টব্য: ঘোষিত শ্রেণি যুক্ত করবেন না, কেবল এই পদ্ধতিগুলি যুক্ত করুন, সবকিছু ঠিকঠাক হবে।

  1. এখন ফোন করতে:

gson একটি রেফারেন্স তৈরি করুন:

ভাল গসন = গসন ()

অ্যারেটিকে জসন স্ট্রিংয়ে রূপান্তর করতে, কল করুন :

val jsonString=gson.convertToJsonString(arrayList)

জসন স্ট্রিং থেকে অ্যারে পেতে, কল করুন :

val arrayList=gson.fromJson<ArrayList<YourModelClassName>>(jsonString)

কোনও মডেলকে জসন স্ট্রিংয়ে রূপান্তর করতে, কল করুন:

val jsonString=gson.convertToJsonString(model)

জসন স্ট্রিংকে মডেলে রূপান্তর করতে, কল করুন:

val model=gson.convertToModel(jsonString, YourModelClassName::class.java)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.