Android में JSON Array (Not Json Object) को पार्स कैसे करें


90

मुझे JSONArray को पार्स करने का तरीका खोजने में परेशानी होती है। यह इस तरह दिख रहा है:

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

मुझे पता है कि अगर JSON को अलग तरह से लिखा गया था, तो इसे पार्स कैसे किया जाए (दूसरे शब्दों में, अगर मेरे पास ऑब्जेक्ट की एक सरणी के बजाय json ऑब्जेक्ट वापस आ गया है)। लेकिन यह सब मेरे पास है और मुझे इसके साथ जाना है।

* EDIT: यह एक वैध जसन है। मैंने इस json का उपयोग करके एक iPhone ऐप बनाया, अब मुझे इसे एंड्रॉइड के लिए करने की आवश्यकता है और इसका पता नहीं लगा सकता। वहाँ बहुत सारे उदाहरण हैं, लेकिन वे सभी JSONObject संबंधित हैं। मुझे JSONArray के लिए कुछ चाहिए।

क्या कोई मुझे कुछ संकेत, या एक ट्यूटोरियल या एक उदाहरण दे सकता है?

बहुत सराहना की !


1
यह देखने की कोशिश करें कि क्या आपका जोंस
एन-ड्रॉइड

क्या आप पार्सिंग जसन के लिए किसी भी पुस्तकालय का उपयोग कर रहे हैं? Json parsing.Much Helpfull के लिए gson लाइब्रेरी का उपयोग करें।
नीलकंठ

यह मान्य है। मैंने इसे एक ऐप में पार्स किया जिसे मैंने iPhone के लिए किया था और यह काम कर रहा है। मैं अभी नहीं जानता कि इसे एंड्रॉइड में कैसे किया जाए
SteBra

1
@ मिनाश, हाँ, मैंने देखा कि मैं gson का उपयोग कर सकता हूं। केवल समस्या है, मुझे मिले सभी उदाहरण एक JSONObject को पार्स करने के लिए नहीं हैं JSONArray
SteBra

अपने कोड को पोस्ट करें जिसे आपने अब तक आज़माया है। यह तदनुसार एक सटीक उत्तर देने में मददगार होगा।
स्प्रिंग ब्रेकर

जवाबों:


146

JsonArray को पार्स करने के लिए निम्नलिखित स्निपेट का उपयोग करें।

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

आशा करता हूँ की ये काम करेगा।


सिर्फ एक सवाल अगर जौनसार्रे में न्यूमेरिक्स जैसे [2] शामिल हैं। [४] और उस अंक के अंदर फिर से एक सरणी शामिल है तो अगर मैं विशेष रूप से पुनः प्राप्त करना चाहता हूं तो कह सकते हैं कि सरणी को न्यूड [4] में जावा कोड में लिखा गया है मुझे int i = 4 लिखना होगा ???
BiggDawgg

@BiggDawgg: खुशी है कि इसने आपकी मदद की। JSON डेटा के साथ एक अलग थ्रेड में अपना प्रश्न पोस्ट करें ताकि मेरे लिए उत्तर देना आसान हो जाए।
स्प्रिंग ब्रेकर

26

मैं अभी थोड़ा सा जैक्सन का उदाहरण दूंगा :

पहले एक डेटा धारक बनाएं जिसमें JSON स्ट्रिंग से फ़ील्ड हैं

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

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

और MyDataHolders की पार्स सूची

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;

क्या आप मुझे एक उदाहरण दे सकते हैं कि मुझे JSON को url से एक स्ट्रिंग के रूप में कैसे मिलेगा, कृपया?
स्टेबरा

1
DefaultHttpClientरों अमल-विधि एक अवरुद्ध कॉल है, इसलिए यह एक पृष्ठभूमि कार्य में किया जाना है, बस स्पष्ट करना क्यों यह अलग वर्ग में है।
vilpe89

Im को HttpGetTask के निर्माता के बारे में एक त्रुटि दी जा रही है। "कंस्ट्रक्टर HttpGetTask (OnHttpGetCompletedListener) लापता प्रकार OnHttpGetCompletedListener को संदर्भित करता है"
SteBra

1
क्या आपने OnHttpGetCompletedListener को आयात किया है? इस तरहimport your_package_name_here.HttpGetTask.OnHttpGetCompletedListener;
vilpe89

1
हाँ, यह समस्या थी ... मेरे मुद्दे को हल करने के लिए धन्यवाद :)
SteBra

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

@Stebra इसका उदाहरण देखें। यह आपकी मदद कर सकता है।

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

1
परिणाम चर आपके JSONArray स्ट्रिंग है
nilkash

परिणामी चर होगा url मुझे json लाने की आवश्यकता होगी या पहले से ही json से प्राप्त होगी?
स्टेबरा

अब तक का सबसे आसान उपाय
0x6C38

6

इस उदाहरण में एक json सरणी के अंदर कई ऑब्जेक्ट हैं। अर्थात्,

यह json array है: [{"name": "name1", "url": "url1"}, {"name": "name2", "url": "url2"}, ...]

यह एक वस्तु है: {"name": "name1", "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");


}

Im URL से मेरा JSONstring प्राप्त करने में कठिन समय रहा। शायद तुम उस के साथ मदद कर सकता है?
स्टेबरा

उदाहरणों के साथ इसे तोड़ने के लिए धन्यवाद, अच्छी स्पष्टता
ryvianstyron

3

कुछ बेहतरीन सुझावों का उल्लेख पहले ही किया जा चुका है। GSON का उपयोग करना वास्तव में बहुत आसान है, और जीवन को आसान बनाने के लिए आप इस वेबसाइट को आज़मा सकते हैं, इसे jsonschema2pojo कहा जाता है और ठीक यही करता है:

आप इसे अपना जसन देते हैं और यह एक जावा ऑब्जेक्ट बनाता है जो आपके प्रोजेक्ट में पेस्ट कर सकता है। आप अपने वैरिएबल्स को एनोटेट करने के लिए GSON का चयन कर सकते हैं, इसलिए अपने जसन से ऑब्जेक्ट को निकालना और भी आसान हो जाता है!


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

आशा है कि यह मदद करेगा


ps "jsonObject.getString (" संदेश ")" प्रकार jsonArray है; पहले मौजूद जवाब को स्ट्रिंग को jsonArray में परिवर्तित नहीं किया जा सकता है; मैं इसे ठीक कर रहा हूँ
최봉재

-1

सूची में मौजूद वस्तुओं के लिए एक POJO जावा क्लास बनाएं:

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

अब बस NameUrlClass की एक सूची बनाएं और इसे ArrayList की तरह शुरू करें:

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

आप इस ऑब्जेक्ट में JSON सरणी स्टोर कर सकते हैं

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

1
यह स्पष्ट नहीं है कि क्या obj = JSONArray;करना चाहिए। JSONArrayइस संदर्भ में क्या है ? यह कहां से आता है? आरंभ का उद्देश्य क्या है objएक साथ new ArrayList<NameUrlClass>, जब आप इसे सीधे बाद में वैसे भी की जगह?
मैक्स वोल्मर

-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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.