অ্যান্ড্রয়েডে কীভাবে JSON অ্যারে (জসন অবজেক্ট নয়) পার্স করবেন


90

কীভাবে JSONArray পার্স করার উপায় খুঁজে পেতে আমার সমস্যা হয়। দেখে মনে হচ্ছে:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]

আমি জানি যে কীভাবে JSON লিখিতভাবে আলাদাভাবে লেখা হয়েছিল (অন্য কথায়, যদি আমার কাছে জেসন অবজেক্ট বস্তুর অ্যারের পরিবর্তে ফিরে আসে)। তবে আমার যা কিছু আছে তা নিয়েই যেতে হবে।

* সম্পাদনা: এটি একটি বৈধ জসন। আমি এই জসনটি ব্যবহার করে একটি আইফোন অ্যাপ তৈরি করেছি, এখন অ্যান্ড্রয়েডের জন্য আমার এটি করা দরকার এবং এটি বের করতে পারি না। এখানে প্রচুর উদাহরণ রয়েছে তবে এগুলি সমস্ত জেএসএনওবজেক্ট সম্পর্কিত। JSONArray এর জন্য আমার কিছু দরকার।

কেউ দয়া করে আমাকে কিছু ইঙ্গিত, বা টিউটোরিয়াল বা উদাহরণ দিতে পারেন?

অনেক প্রশংসিত !


4
যদি আপনার JSON বৈধ দেখতে এই চেষ্টা json.parser.online.fr
আন-Droid

আপনি json পার্সিং এর জন্য কোন লাইব্রেরি ব্যবহার করছেন? জেসন পার্সিংয়ের জন্য জিএসন লাইব্রেরি ব্যবহার করুন uch
নীলকাশ

এটা বৈধ। আমি একটি অ্যাপ্লিকেশনটিতে এটি আইফোনটির জন্য পার্স করেছি এবং এটি কাজ করছে। অ্যান্ড্রয়েডে কীভাবে এটি করা যায় তা আমি জানি না
স্টিবরা

4
@ নিকাশ, হ্যাঁ আমি লক্ষ্য করেছি আমি জিএসএন ব্যবহার করতে পারি। কেবল সমস্যাটি হ'ল, আমি যে সমস্ত উদাহরণ পেয়েছি সেগুলি JSONObject পার্স করার জন্য যা JSONArray নয়
স্টিব্রা

আপনার কোডটি পোস্ট করুন যা আপনি এখনও চেষ্টা করেছেন I সে অনুযায়ী একটি সুনির্দিষ্ট উত্তর দিতে সহায়ক হবে।
স্প্রিং ব্রেকার

উত্তর:


147

জসনআরে পার্স করার জন্য নিম্নলিখিত স্নিপেট ব্যবহার করুন।

JSONArray jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}

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


jsonarray এর মধ্যে [2] এর মতো সংখ্যাসমূহ অন্তর্ভুক্ত করা মাত্র একটি প্রশ্ন [[4] এবং সেই সংখ্যার ভিতরে আবার একটি অ্যারে অন্তর্ভুক্ত রয়েছে তাই আমি যদি বিশেষত কাছ থেকে পুনরুদ্ধার করতে চাই তবে জাভা কোডের অঙ্কগুলিতে [4] নেস্টেড অ্যারে বলতে পারি আমি অবশ্যই লিখব i = 4 ???
বিগডডগ

@ বিগডাএগজি: খুশী হয়েছে যে এটি আপনাকে সহায়তা করেছে। আপনার প্রশ্নটি JSON ডেটা সহ একটি পৃথক থ্রেডে পোস্ট করুন যাতে উত্তর দেওয়া আমার পক্ষে সহজ হবে।
স্প্রিং ব্রেকার

26

আমি একটু জ্যাকসনের উদাহরণ দেব :

প্রথমে একটি ডেটা ধারক তৈরি করুন যার জেএসওএন স্ট্রিং থেকে ক্ষেত্র রয়েছে

// imports
// ...
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDataHolder {
    @JsonProperty("name")
    public String mName;

    @JsonProperty("url")
    public String mUrl;
}

এবং মাইডাটাহোল্ডারদের বিশ্লেষণের তালিকা

String jsonString = // your json
ObjectMapper mapper = new ObjectMapper();
List<MyDataHolder> list = mapper.readValue(jsonString, 
    new TypeReference<ArrayList<MyDataHolder>>() {});

তালিকা আইটেম ব্যবহার করে

String firstName = list.get(0).mName;
String secondName = list.get(1).mName;

আপনি কি আমাকে একটি উদাহরণ দিতে পারেন আমি কীভাবে ইউআরএল থেকে জেএসএনকে স্ট্রিং হিসাবে পাব, দয়া করে?
স্টিব্রা

4
DefaultHttpClientগুলি চালানো-পদ্ধতি একটি অবরোধ আহবান তাই এটি একটি ব্যাকগ্রাউন্ড টাস্ক মধ্যে সম্পন্ন করা, ঠিক পরিষ্কার করতে কেন আলাদা ক্লাসে আছে।
vilpe89

HTTPGetTask এর নির্মাণকারী সম্পর্কে আমাকে একটি ত্রুটি দেওয়া হচ্ছে। "কনস্ট্রাক্টর এইচটিপিপেট গেটটাস্ক (ওএনএইচটিপিগেট কমপ্লিটডলাইজনার) অনুপস্থিত প্রকারটি অনহট্টপেট গেট কমপ্লিটডলাইটারকে বোঝায়"
স্টিব্রা

4
আপনি কি অনএইচটিটিপিগেটকমপ্লিটলিস্টনার আমদানি করেছেন? এটি পছন্দ করুনimport your_package_name_here.HttpGetTask.OnHttpGetCompletedListener;
vilpe89

4
হ্যাঁ, সমস্যাটি ছিল ... আমার সমস্যা সমাধানের জন্য ধন্যবাদ :)
স্টিব্রা

20
public static void main(String[] args) throws JSONException {
    String str = "[{\"name\":\"name1\",\"url\":\"url1\"},{\"name\":\"name2\",\"url\":\"url2\"}]";

    JSONArray jsonarray = new JSONArray(str);


    for(int i=0; i<jsonarray.length(); i++){
        JSONObject obj = jsonarray.getJSONObject(i);

        String name = obj.getString("name");
        String url = obj.getString("url");

        System.out.println(name);
        System.out.println(url);
    }   
}   

আউটপুট:

name1
url1
name2
url2

12

অবজেক্টগুলি ধরে রাখতে একটি ক্লাস তৈরি করুন।

public class Person{
   private String name;
   private String url;
   //Get & Set methods for each field
}

তারপরে নিম্নরূপে ডিসেরায়ালাইজ করুন:

Gson gson = new Gson();
Person[] person = gson.fromJson(input, Person[].class); //input is your String

রেফারেন্স নিবন্ধ: http://blog.patrickbaumann.com/2011/11/gson-array-deserialization/


আমি মনে করি এই "ইনপুট "টি সেই জসনের URL হবে? নাকি এটা অন্য কিছু?
স্টিব্রা

এটি একটি খুব সহজ সমাধান। এটি আমার দৃষ্টিতে গ্রহণযোগ্য হওয়া উচিত
FabioC

6

@ স্টেব্রা এই উদাহরণটি দেখুন। এটি আপনাকে সাহায্য করতে পারে।

public class CustomerInfo 
{   
    @SerializedName("customerid")
    public String customerid;
    @SerializedName("picture")
    public String picture;

    @SerializedName("location")
    public String location;

    public CustomerInfo()
    {}
}

এবং আপনি যখন ফলাফল পাবেন; এভাবে পার্স করুন

List<CustomerInfo> customers = null;
customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());

4
ফলাফলের ভেরিয়েবলটি আপনার JSONArray স্ট্রিং
নীলকাশ

আমার যে ইউআরএল থেকে জসন আনতে হবে বা ইতিমধ্যে জেএসসন আনতে হবে সেই ইউআরএলটির পরিবর্তিত পরিবর্তন হতে পারে?
স্টিব্রা

এখন পর্যন্ত সবচেয়ে সহজ সমাধান
0x6C38

6

এই উদাহরণে একটি জসন অ্যারের ভিতরে বেশ কয়েকটি অবজেক্ট রয়েছে। এটাই,

এটি হ'ল জসন অ্যারে: [{"নাম": "নাম 1", "url": "url1" 1, {"নাম": "নাম 2", "url": "url2"}, ...]

এটি একটি অবজেক্ট: {"নাম": "নাম 1", "url": "url1"}

ধরে নিই যে আপনি jSonResultString নামক একটি স্ট্রিং ভেরিয়েবলের ফলাফল পেয়েছেন:

JSONArray arr = new JSONArray(jSonResultString);

  //loop through each object
  for (int i=0; i<arr.length(); i++){

  JSONObject jsonProductObject = arr.getJSONObject(i);
  String name = jsonProductObject.getString("name");
  String url = jsonProductObject.getString("url");


}

ইউআরএল থেকে আমার জেএসএসনস্ট্রিং পেতে আমার বেশ কষ্ট হচ্ছে। আপনি যে সাহায্য করতে পারে?
স্টিব্রা


3

ইতিমধ্যে কয়েকটি দুর্দান্ত পরামর্শ উল্লেখ করা হয়েছে। জিএসওএন ব্যবহার করা সত্যই কার্যকর এবং জীবনকে আরও সহজ করার জন্য আপনি এই ওয়েবসাইটটি ব্যবহার করে দেখতে পারেন এটি jsonschema2pojo বলা হয় এবং ঠিক তা করে:

আপনি এটি আপনার জসন দিন এবং এটি একটি জাভা অবজেক্ট তৈরি করে যা আপনার প্রকল্পে পেস্ট করতে পারে। আপনি আপনার ভেরিয়েবলগুলি টিকিয়ে রাখতে জিএসএন নির্বাচন করতে পারেন, সুতরাং আপনার জসন থেকে অবজেক্টটি বের করা আরও সহজ হয়ে যায়!


2

সার্ভার উদাহরণ থেকে আমার কেস লোড করুন ..

int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages"));
            if (jsonLength != 1) {
                for (int i = 0; i < jsonLength; i++) {
                    JSONArray jsonArray = new JSONArray(jsonObject.getString("messages"));
                    JSONObject resJson = (JSONObject) jsonArray.get(i);
                    //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at"));
                }

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


"" jsonObject.getString ("বার্তা") "প্রকারটি jsonArray; প্রথম অস্তিত্বের উত্তরটি স্ট্রিংটিকে জসনআরেতে রূপান্তর করা যায় না; আমি ঠিক করেছি
10

-1

তালিকার অবজেক্টের জন্য POJO জাভা ক্লাস তৈরি করুন:

class NameUrlClass{
       private String name;
       private String url;
       //Constructor
       public NameUrlClass(String name,String url){
              this.name = name;
              this.url = url; 
        }
}

এখন কেবল নেম ইউলক্লাসের একটি তালিকা তৈরি করুন এবং এটির মতো অ্যারেলিস্টে এটি সূচনা করুন:

List<NameUrlClass> obj = new ArrayList<NameUrlClass>;

আপনি এই বস্তুতে JSON অ্যারে সঞ্চয় করতে পারেন

obj = JSONArray;//[{"name":"name1","url":"url1"}{"name":"name2","url":"url2"},...]

4
কী obj = JSONArray;করার কথা তা পরিষ্কার নয় । কি JSONArrayএই প্রেক্ষাপটে? এটা কোথা থেকে এসেছে? আপনি যখন পরে যেকোন উপায়ে সরাসরি প্রতিস্থাপন করেন, তখন objএকটি দিয়ে আরম্ভ করার উদ্দেশ্য কী new ArrayList<NameUrlClass>?
ম্যাক্স ভলমার 11

-3

পুরাতন পোস্টটি আমি জানি, তবে যতক্ষণ না আমি প্রশ্নটি ভুল বুঝেছি, এই কৌশলটি করা উচিত:

s = '[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"}]';
eval("array=" + s);
for (var i = 0; i < array.length; i++) {
for (var index in array[i]) {
    alert(array[i][index]);
}

}


-3
            URL url = new URL("your URL");
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream stream = connection.getInputStream();
            BufferedReader reader;
            reader = new BufferedReader(new InputStreamReader(stream));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            //setting the json string
            String finalJson = buffer.toString();

            //this is your string get the pattern from buffer.
            JSONArray jsonarray = new JSONArray(finalJson);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.