3
   [
    {
        "name":           "The Universe & The Earth"
      , "imagename":      "cat1.jpg"
      , "active":         "Y"
      , "createdon":      "1901-01-01"
      , "lastmodifiedon": "1901-01-01 00:00:00"
      , "description":    "Knowledge of Earth location in the universe has been shaped by 400 years of telescopic observations, and has expanded radically in the last century.\n"
      , "id":             "1"
    }
  , {
        "name":           "Life on Earth"
      , "imagename":      "cat2.jpg"
      , "active":         "Y"
      , "createdon":      "1901-01-01"
      , "lastmodifiedon": "1901-01-01 00:00:00"
      , "description":    "Over the last 3.7 billion years or so, living organisms on the Earth have diversified and adapted to almost every environment imaginable."
      , "id":             "2"
    }
]

This is my json values. Now i want to parse and displayed in custom list view how can i do this? I followed http://www.androidhive.info/2012/01/android-json-parsing-tutorial/ this is link but can't be achieve. How can i do this? Can anybody tell me? Thanks in advance.

3
  • 1
    JSONArray array = new JSONArray(theString); Commented Jul 12, 2013 at 10:39
  • is this jsonArray and inside it there is json object? Commented Jul 12, 2013 at 10:41
  • yes.. JsonArray holds JsonObjects inside. Commented Jul 12, 2013 at 10:43

5 Answers 5

10

This is a JSONArray and not a JSONObject - to make a JSONObject from it, use

JSONObject jsonObject = jsonArray.getJSONObject(0);

this gets the first JSONObject from this JSONArray.

If you have multiple JSONObjects, use this:

JSONObject jsonObject;
for(int n = 0; n < jsonArray.length(); n++)
{
    jsonObject = jsonArray.getJSONObject(n);
}

To get the values:

jsonObject.getString("name");
Sign up to request clarification or add additional context in comments.

Comments

3

Try following code.

JSONArray jArr = new JSONArray(your_json_string);

for (int count = 0; count < jArr.length(); count++) {
    JSONObject obj = jArr.getJSONObject(count);
    String name = obj.getString("name");
    String imageName = obj.getString("imagename");
    //so on
}

2 Comments

Hi. What is your_json_string here ?
@ShivamBhalla, "your_json_string" will be string which is written in question. I have given answer based on question and used same JSON string of question. :)
1

First I created parser class JSONParser.java

package com.example.myparse;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;

public class JSONParser {

static InputStream is = null;
static JSONArray jarray = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONArray getJSONFromUrl(String url) {

       StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
          HttpResponse response = client.execute(httpGet);
          StatusLine statusLine = response.getStatusLine();
          int statusCode = statusLine.getStatusCode();
          if (statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
              builder.append(line);
            }
          } else {
            Log.e("==>", "Failed to download file");
          }
        } catch (ClientProtocolException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }

    // try parse the string to a JSON object
    try {
        jarray = new JSONArray( builder.toString());
        //System.out.println(""+jarray);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jarray;

}
 }

Then create an object in main class like this....

 ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); // used to display in list view

 JSONParser jParser = new JSONParser();
 JSONArray json = jParser.getJSONFromUrl(url); // pass your ulr here

 for(int i = 0; i <= json.length(); i++)  // using for loop for parsing
 {
   try 
    {
     JSONObject c = json.getJSONObject(i);
     String name =  c.getString(TAG_NAME);
     String imagename =  c.getString(TAG_IMAGENAME);
     String active =  c.getString(TAG_ACTIVE);
     String createdon = c.getString(TAG_CREATEDON);
     String lastmodifiedon =  c.getString(TAG_LASTMODIFIEDON);
     String description =  c.getString(TAG_DESCRIPTION);
     String id =  c.getString(TAG_ID);

          // If you want to show your parsed value in list view add the values into the array list              

    // creating new HashMap
    HashMap<String, String> map = new HashMap<String, String>();

          // adding each child node to HashMap key => value 
          map.put(TAG_NAME, name);
          map.put(TAG_IMAGENAME, imagename);
    map.put(TAG_ACTIVE, active);
    map.put(TAG_CREATEDON, createdon);
    map.put(TAG_LASTMODIFIEDON, lastmodifiedon);
    map.put(TAG_DESCRIPTION, description);
    map.put(TAG_ID, id);
         // adding HashList to ArrayList
   contactList.add(map);
 System.out.println("contactlist---->"+contactList);
}

 catch (JSONException e) 
       {
    e.printStackTrace();
 }
  }

I did by this way. I got the proper output. All the best.

Comments

0

Check out GSON by Google. It lets you serialize/deserialize JSON in a super easy way - http://code.google.com/p/google-gson/

Comments

0

You can simply use Map to iterate through all the keys and values of JSONObject,

        String jsonString = "[{\"name\":\"The Universe & The Earth\", \"imagename\":\"cat1.jpg\"}, {\"name\":\"Life on Earth\", \"imagename\":\"cat2.jpg\"}]";
        JSONArray array;
        try {
            array = new JSONArray(jsonString);
            JSONObject object;
            Map<String,String> map;
            for (int i = 0; i < array.length(); i++) {
                object = new JSONObject(array.getJSONObject(i).toString());
                map = new HashMap<String,String>();
                Iterator<?> iter = object.keys();
                while(iter.hasNext()){
                    String key = (String)iter.next();
                    String value = object.getString(key);
                    map.put(key,value);
                }
                System.out.println(map.toString());
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.