How do I parse JSON in Android? [duplicate] How do I parse JSON in Android? [duplicate] json json

How do I parse JSON in Android? [duplicate]


Android has all the tools you need to parse json built-in. Example follows, no need for GSON or anything like that.

Get your JSON:

Assume you have a json string

String result = "{\"someKey\":\"someValue\"}";

Create a JSONObject:

JSONObject jObject = new JSONObject(result);

If your json string is an array, e.g.:

String result = "[{\"someKey\":\"someValue\"}]"

then you should use JSONArray as demonstrated below and not JSONObject

To get a specific string

String aJsonString = jObject.getString("STRINGNAME");

To get a specific boolean

boolean aJsonBoolean = jObject.getBoolean("BOOLEANNAME");

To get a specific integer

int aJsonInteger = jObject.getInt("INTEGERNAME");

To get a specific long

long aJsonLong = jObject.getLong("LONGNAME");

To get a specific double

double aJsonDouble = jObject.getDouble("DOUBLENAME");

To get a specific JSONArray:

JSONArray jArray = jObject.getJSONArray("ARRAYNAME");

To get the items from the array

for (int i=0; i < jArray.length(); i++){    try {        JSONObject oneObject = jArray.getJSONObject(i);        // Pulling items from the array        String oneObjectsItem = oneObject.getString("STRINGNAMEinTHEarray");        String oneObjectsItem2 = oneObject.getString("anotherSTRINGNAMEINtheARRAY");    } catch (JSONException e) {        // Oops    }}


  1. Writing JSON Parser Class

    public class JSONParser {    static InputStream is = null;    static JSONObject jObj = null;    static String json = "";    // constructor    public JSONParser() {}    public JSONObject getJSONFromUrl(String url) {        // Making HTTP request        try {            // defaultHttpClient            DefaultHttpClient httpClient = new DefaultHttpClient();            HttpPost httpPost = new HttpPost(url);            HttpResponse httpResponse = httpClient.execute(httpPost);            HttpEntity httpEntity = httpResponse.getEntity();            is = httpEntity.getContent();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (ClientProtocolException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        try {            BufferedReader reader = new BufferedReader(new InputStreamReader(                    is, "iso-8859-1"), 8);            StringBuilder sb = new StringBuilder();            String line = null;            while ((line = reader.readLine()) != null) {                sb.append(line + "\n");            }            is.close();            json = sb.toString();        } catch (Exception e) {            Log.e("Buffer Error", "Error converting result " + e.toString());        }        // try parse the string to a JSON object        try {            jObj = new JSONObject(json);        } catch (JSONException e) {            Log.e("JSON Parser", "Error parsing data " + e.toString());        }        // return JSON String        return jObj;    }}
  2. Parsing JSON Data
    Once you created parser class next thing is to know how to use that class. Below i am explaining how to parse the json (taken in this example) using the parser class.

    2.1. Store all these node names in variables: In the contacts json we have items like name, email, address, gender and phone numbers. So first thing is to store all these node names in variables. Open your main activity class and declare store all node names in static variables.

    // url to make requestprivate static String url = "http://api.9android.net/contacts";// JSON Node namesprivate static final String TAG_CONTACTS = "contacts";private static final String TAG_ID = "id";private static final String TAG_NAME = "name";private static final String TAG_EMAIL = "email";private static final String TAG_ADDRESS = "address";private static final String TAG_GENDER = "gender";private static final String TAG_PHONE = "phone";private static final String TAG_PHONE_MOBILE = "mobile";private static final String TAG_PHONE_HOME = "home";private static final String TAG_PHONE_OFFICE = "office";// contacts JSONArrayJSONArray contacts = null;

    2.2. Use parser class to get JSONObject and looping through each json item. Below i am creating an instance of JSONParser class and using for loop i am looping through each json item and finally storing each json data in variable.

    // Creating JSON Parser instanceJSONParser jParser = new JSONParser();// getting JSON string from URLJSONObject json = jParser.getJSONFromUrl(url);    try {    // Getting Array of Contacts    contacts = json.getJSONArray(TAG_CONTACTS);    // looping through All Contacts    for(int i = 0; i < contacts.length(); i++){        JSONObject c = contacts.getJSONObject(i);        // Storing each json item in variable        String id = c.getString(TAG_ID);        String name = c.getString(TAG_NAME);        String email = c.getString(TAG_EMAIL);        String address = c.getString(TAG_ADDRESS);        String gender = c.getString(TAG_GENDER);        // Phone number is agin JSON Object        JSONObject phone = c.getJSONObject(TAG_PHONE);        String mobile = phone.getString(TAG_PHONE_MOBILE);        String home = phone.getString(TAG_PHONE_HOME);        String office = phone.getString(TAG_PHONE_OFFICE);    }} catch (JSONException e) {    e.printStackTrace();}


I've coded up a simple example for you and annotated the source. The example shows how to grab live json and parse into a JSONObject for detail extraction:

try{    // Create a new HTTP Client    DefaultHttpClient defaultClient = new DefaultHttpClient();    // Setup the get request    HttpGet httpGetRequest = new HttpGet("http://example.json");    // Execute the request in the client    HttpResponse httpResponse = defaultClient.execute(httpGetRequest);    // Grab the response    BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));    String json = reader.readLine();    // Instantiate a JSON object from the request response    JSONObject jsonObject = new JSONObject(json);} catch(Exception e){    // In your production code handle any errors and catch the individual exceptions    e.printStackTrace();}

Once you have your JSONObject refer to the SDK for details on how to extract the data you require.