Support free tutorials



vogella training Training Books

JSON in Android - Tutorial

Lars Vogel

Version 1.4

15.09.2014

JSON with Android

This article describes how to process JSON within Android. It is based on Eclipse 4.4, Java 1.6 and Android 4.4.


Table of Contents

1. Android and JSON
2. Example: reading JSON from Bugzilla
2.1. JSON Example: Bugzilla
2.2. Project
3. Write JSON
4. About this website
4.1. Donate to support free tutorials
4.2. Questions and discussion
4.3. License for this tutorial and its code
5. Links and Literature
5.1. Source Code
5.2. Android Resources
5.3. vogella GmbH training and consulting support

1. Android and JSON

The Android platform includes the json.org libraries which allow working efficiently with JSON files. But you can also easily integrated other solution for parsing JSON files.

2. Example: reading JSON from Bugzilla

2.1. JSON Example: Bugzilla

Bugzilla plans to add a REST interface serving JSON. You can just call a URI and retrieve JSON. Here are some examples from Mozilla which already downported this API.:

Table 1. Bugzilla URIs

URI Description
https://bugzilla.mozilla.org/rest/bug/35 Get info about Bug 35
https://bugzilla.mozilla.org/rest/bug/707428/comment Get all comments for the bug 707428.


Please note that some URIs return a JSONObject object while others return a JSONArray.

2.2. Project

Create a new Android project called com.vogella.bugzilla.json with the package com.vogella.bugzilla.json and the activity called ParseBugzillaActivity.

Create the following coding for the activity. This will download the twitter feed for the Twitter user called vogella and write the number of entries and the text messages to the Android log file.

package com.vogella.android.bugzilla.json;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

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.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class ParseBugzillaActivity extends Activity {
  
/** Called when the activity is first created. */
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); # Just for testing, allow network access in the main thread # NEVER use this is productive code StrictMode.ThreadPolicy policy = new StrictMode. ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); setContentView(R.layout.main); String input = readBugzilla(); try { JSONObject json = new JSONObject(input); Log.i(ParseBugzillaActivity.class.getName(), jsonObject.toString()); } } catch (Exception e) { e.printStackTrace(); } } public String readBugzilla() { StringBuilder builder = new StringBuilder(); HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("https://bugzilla.mozilla.org/rest/bug?assigned_to=lhenry@mozilla.com"); 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(ParseJSON.class.toString(), "Failed to download file"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return builder.toString(); } }

Warning

The code example allows network access in the main thread to simplify the code snippet. In reality always ensure that network access is done in a background thread.

To run this example assign the uses-permission to your AndroidManifest.xml for "android.permission.INTERNET".

3. Write JSON

Writing JSON is very simple. Just create the JSONObject or JSONArray and use the toString() method.

public void writeJSON() {
  JSONObject object = new JSONObject();
  try {
    object.put("name", "Jack Hack");
    object.put("score", new Integer(200));
    object.put("current", new Double(152.32));
    object.put("nickname", "Hacker");
  } catch (JSONException e) {
    e.printStackTrace();
  }
  System.out.println(object);
} 

4. About this website

4.1. Donate to support free tutorials

Please consider a contribution Support free tutorials if this article helped you. It will help to maintain our content and our Open Source activities.

4.2. Questions and discussion

Writing and updating these tutorials is a lot of work. If this free community service was helpful, you can support the cause by giving a tip as well as reporting typos and factual errors.

If you find errors in this tutorial, please notify me (see the top of the page). Please note that due to the high volume of feedback I receive, I cannot answer questions to your implementation. Ensure you have read the vogella FAQ as I don't respond to questions already answered there.

4.3. License for this tutorial and its code

This tutorial is Open Content under the CC BY-NC-SA 3.0 DE license. Source code in this tutorial is distributed under the Eclipse Public License. See the vogella License page for details on the terms of reuse.

5. Links and Literature

5.1. Source Code

Source Code of Examples

5.3. vogella GmbH training and consulting support

TRAINING SERVICE & SUPPORT
The vogella company provides comprehensive training and education services from experts in the areas of Eclipse RCP, Android, Git, Java, Gradle and Spring. We offer both public and inhouse training. Whichever course you decide to take, you are guaranteed to experience what many before you refer to as “The best IT class I have ever attended”. The vogella company offers expert consulting services, development support and coaching. Our customers range from Fortune 100 corporations to individual developers.