한국어

스마트폰앱

온누리070 플레이스토어 다운로드
    acrobits softphone
     온누리 070 카카오 프러스 친구추가온누리 070 카카오 프러스 친구추가친추
     카카오톡 채팅 상담 카카오톡 채팅 상담카톡
    
     라인상담
     라인으로 공유

     페북공유

   ◎위챗 : speedseoul


  
     PAYPAL
     
     PRICE
     

pixel.gif

    before pay call 0088 from app


JSON is very light weight, structured, easy to parse and much human readable. JSON is best alternative to XML when your android app needs to interchange data with your server. If your app consuming XML data, you can always refer to Android XML Parsing Tutorial.

In this tutorial we are going to learn how to parse JSON in android using different ways, using java.net library and other third part libraries.

The Sample JSON

Following is the sample JSON that we are going to parse in this tutorial. This is very simple JSON which gives us list of contacts where each node contains contact information like name, email, address, gender and phone numbers.

You can get this JSON data by accessing https://api.androidhive.info/contacts/

{
    "contacts": [
        {
                "id": "c200",
                "name": "Ravi Tamada",
                "email": "ravi@gmail.com",
                "address": "xx-xx-xxxx,x - street, x - country",
                "gender" : "male",
                "phone": {
                    "mobile": "+91 0000000000",
                    "home": "00 000000",
                    "office": "00 000000"
                }
        },
        {
                "id": "c201",
                "name": "Johnny Depp",
                "email": "johnny_depp@gmail.com",
                "address": "xx-xx-xxxx,x - street, x - country",
                "gender" : "male",
                "phone": {
                    "mobile": "+91 0000000000",
                    "home": "00 000000",
                    "office": "00 000000"
                }
        },
        .
        .
        .
        .
  ]
}

The difference between [ and { – (Square brackets and Curly brackets)

In general all the JSON nodes will start with a square bracket or with a curly bracket. The difference between [ and { is, the square bracket ([) represents starting of an JSONArray node whereas curly bracket ({) represents JSONObject. So while accessing these nodes we need to call appropriate method to access the data.

If your JSON node starts with [, then we should use getJSONArray() method. Same as if the node starts with {, then we should use getJSONObject() method.

json parsing structor

1. Creating New Project

So let’s start by creating a new android project. We’ll build a simple app which fetches the json from url, parses it and displays the contacts in a list view. Here we’ll use import java.net libraries (which are natively supported in android) to make the http call and fetch the json from url.

1. Create a new project in Android Studio from File ⇒ New Project and fill out the required details.

2. As we are fetching the JSON by making HTTP calls, we need to add INTERNET permission in AndroidManifest.xml file. Open AndroidManifest.xml and add the following permission.

<uses-permission android:name="android.permission.INTERNET" />
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
    package="info.androidhive.jsonparsing" >
 
    <uses-permission android:name="android.permission.INTERNET"/>
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>

3. Create a class named HttpHandler.java and use the below code. Here makeServiceCall() makes http call to particular url and fetches the response. In our case, we use this to get the raw json from the url.

HttpHandler.java
package info.androidhive.jsonparsing;
 
import android.util.Log;
 
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
 
/**
 * Created by Ravi Tamada on 01/09/16.
 * www.androidhive.info
 */
public class HttpHandler {
 
    private static final String TAG = HttpHandler.class.getSimpleName();
 
    public HttpHandler() {
    }
 
    public String makeServiceCall(String reqUrl) {
        String response = null;
        try {
            URL url = new URL(reqUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            // read the response
            InputStream in = new BufferedInputStream(conn.getInputStream());
            response = convertStreamToString(in);
        } catch (MalformedURLException e) {
            Log.e(TAG, "MalformedURLException: " + e.getMessage());
        } catch (ProtocolException e) {
            Log.e(TAG, "ProtocolException: " + e.getMessage());
        } catch (IOException e) {
            Log.e(TAG, "IOException: " + e.getMessage());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
        return response;
    }
 
    private String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
 
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line).append('\n');
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
}

4. Before making the http call, let’s add a list view first in our view. Open the layout file of main activity (activity_main.xml) and add a ListView element.

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="info.androidhive.jsonparsing.MainActivity">
 
    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

5. Create another layout file named list_item.xml with following content. This will be used to render single list item view.

list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="@dimen/activity_horizontal_margin">
 
    <TextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:paddingTop="6dip"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="16sp"
        android:textStyle="bold" />
 
    <TextView
        android:id="@+id/email"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:textColor="@color/colorAccent" />
 
    <TextView
        android:id="@+id/mobile"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#5d5d5d"
        android:textStyle="bold" />
</LinearLayout>

6. Open MainActivity.java and declare the necessary variables for the list view. If you haven’t worked with list view yet, Android ListView Tutorial will helps you in getting started.

MainActivity.java
public class MainActivity extends AppCompatActivity {
 
    private String TAG = MainActivity.class.getSimpleName();
 
    private ProgressDialog pDialog;
    private ListView lv;
 
    // URL to get contacts JSON
    private static String url = "https://api.androidhive.info/contacts/";
 
    ArrayList<HashMap<String, String>> contactList;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        contactList = new ArrayList<>();
 
        lv = (ListView) findViewById(R.id.list);
    }
}

1.1 Downloading & Parsing the JSON

7. As we are getting the JSON by making HTTP call, I am adding a Async class GetContacts to make http calls on background thread. Add the following method in your main activity class.

In onPreExecute() method progress dialog is shown before making the http call.

In doInBackground() method, makeServiceCall() is called to get the json from url. Once the json is fetched, it is parsed and each contact is added to array list.

In onPostExecute() method the progress dialog is dismissed and the array list data is displayed in list view using an adapter.

Also note that I have used getJSONArray() or getJSONObject() method depending on the type of node.

MainActivity.java
package info.androidhive.jsonparsing;
 
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import java.util.ArrayList;
import java.util.HashMap;
 
public class MainActivity extends AppCompatActivity {
 
    private String TAG = MainActivity.class.getSimpleName();
 
    private ProgressDialog pDialog;
    private ListView lv;
 
    // URL to get contacts JSON
    private static String url = "https://api.androidhive.info/contacts/";
 
    ArrayList<HashMap<String, String>> contactList;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        contactList = new ArrayList<>();
 
        lv = (ListView) findViewById(R.id.list);
 
        new GetContacts().execute();
    }
 
    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();
 
        }
 
        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();
 
            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);
 
            Log.e(TAG, "Response from url: " + jsonStr);
 
            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);
 
                    // Getting JSON Array node
                    JSONArray contacts = jsonObj.getJSONArray("contacts");
 
                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);
 
                        String id = c.getString("id");
                        String name = c.getString("name");
                        String email = c.getString("email");
                        String address = c.getString("address");
                        String gender = c.getString("gender");
 
                        // Phone node is JSON Object
                        JSONObject phone = c.getJSONObject("phone");
                        String mobile = phone.getString("mobile");
                        String home = phone.getString("home");
                        String office = phone.getString("office");
 
                        // tmp hash map for single contact
                        HashMap<String, String> contact = new HashMap<>();
 
                        // adding each child node to HashMap key => value
                        contact.put("id", id);
                        contact.put("name", name);
                        contact.put("email", email);
                        contact.put("mobile", mobile);
 
                        // adding contact to contact list
                        contactList.add(contact);
                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });
 
                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });
 
            }
 
            return null;
        }
 
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, contactList,
                    R.layout.list_item, new String[]{"name", "email",
                    "mobile"}, new int[]{R.id.name,
                    R.id.email, R.id.mobile});
 
            lv.setAdapter(adapter);
        }
 
    }
}

If you run the project, you can see json data populated into list view as shown in the below image.

android json parsing tutorial

2. Json Parsing using Library

The above method is very easy for simpler json. If the json is very complex, it is better to consider the third party libraries as they are much faster and reliable. Below are the popular libraries used to parse the json.

2.1 Using Volley Library

Volley HTTP library provides easy way to make networks calls. In Android JSON parsing using Volley you can learn how to do that same in easy way using volley networking library which provides you lot of advantages like success/error callback methods and cache options.

2.2 Using Retrofit Library

Retrofit is much popular than volley. The parsing is done using jackson libraries in which you just have to create models for json nodes and the library automatically converts the json into appropriate objects. Go through Android Working with Retrofit HTTP Library which explains in detail about retrofit library.

Change Log
Updated On27th Dec 2013 (Content Update, Bug fixes)
1st Sep 2016 (Content Update, Bug fixes, latest libraries)
번호
제목
글쓴이
58 node.js와 socketIO를 이용한 채팅 프로그램 제작시 아이폰 소켓끊김현상
admin
2019-06-06 4254
57 objective c parse json from url request dispatch_async
admin
2019-06-06 3653
56 JSON Parsing in Objective-C 제이슨 파싱 NSDictionary NSArray valueForKey
admin
2019-06-06 4857
55 [IOS] Json 형태의 스트링을 NSDictionary 로 변환 파싱 objectForKey
admin
2019-06-06 4197
54 Objective c parse json from url request
admin
2019-06-03 3901
53 [iPhone] HTTP Request/Response Wrapper 클래스 만들기 매우 잘된 설명
admin
2019-05-21 3649
52 Creating an NSObject that makes REST API calls (with threading)
admin
2019-05-20 3702
51 iOS NSURLConnection By Example
admin
2019-05-20 3800
50 objective c session post get방식
admin
2019-05-20 4543
49 Node.js + Express.js + Bootstrap(부트스트랩) 시작하기
admin
2019-04-15 8703
48 Android Asynchronous Http Client A Callback-Based Http Client Library for Android
admin
2018-06-05 16736
47 two simple AsyncTasks that use the updated JSONParser class login password
admin
2018-05-10 5430
46 HttpURLConnection post get JSONObject makeHttpRequest
admin
2018-05-10 6121
45 Android: How to parse JSON Array of Array of objects 제이슨 어레이 오브젝트 값 가져오기
admin
2018-05-10 5902
44 안드로이드 Reading JSON Write JSON
admin
2018-05-07 24755
43 Android: Login with Google Account
admin
2018-05-07 6857
42 Login and Registration in Android using PHP and MySQL
admin
2018-05-07 23948
41 JSON Parsing in Android over HTTP
admin
2018-05-07 5759
40 Android | Send “POST” JSON Data to Server
admin
2018-05-07 142171
39 Sending JSON Data to Server using Async Thread
admin
2018-05-06 5467
38 How do I send data to a Node.js server from an Android app?
admin
2018-05-06 67154
37 How To Make HTTP POST Request To Server - Android Example
admin
2018-05-06 5551
36 Android - Send a HTTP(S) POST request
admin
2018-05-06 6550
35 Android Fundamentals – AsyncTask Post
admin
2018-05-06 5643
34 Android JSON Parsing from REST Service Example Post Get
admin
2018-05-06 6556
33 Android OkHttp3 Http Get Post Request Example
admin
2018-05-06 6216
32 How to send HTTP GET / POST request in Java
admin
2018-05-06 6326
31 Android JSON Parsing from REST Service Example
admin
2018-05-06 6505
30 JSON Parsing in Android using Android Studio 기초 및 소스코드
admin
2018-05-06 5851
29 Android Asynchronous Http Client 안드로이드 클라이언트
admin
2018-05-05 12145