Android - Parser JSON

JSON adalah singkatan dari JavaScript Object Notation. Ini adalah format pertukaran data independen dan merupakan alternatif terbaik untuk XML. Bab ini menjelaskan cara mengurai file JSON dan mengekstrak informasi yang diperlukan darinya.

Android menyediakan empat kelas berbeda untuk memanipulasi data JSON. Kelas-kelas ini adalahJSONArray,JSONObject,JSONStringer and JSONTokenizer.

Langkah pertama adalah mengidentifikasi bidang dalam data JSON yang Anda minati. Misalnya. Di JSON yang diberikan di bawah ini, kami hanya tertarik untuk mendapatkan suhu.

{
   "sys":
   {
      "country":"GB",
      "sunrise":1381107633,
      "sunset":1381149604
   },
   "weather":[
      {
         "id":711,
         "main":"Smoke",
         "description":"smoke",
         "icon":"50n"
      }
   ],
	
  "main":
   {
      "temp":304.15,
      "pressure":1009,
   }
}

JSON - Elemen

File JSON terdiri dari banyak komponen. Berikut adalah tabel yang mendefinisikan komponen file JSON dan deskripsinya -

Sr Tidak Deskripsi komponen
1

Array([)

Dalam file JSON, tanda kurung siku ([) mewakili larik JSON

2

Objects({)

Dalam file JSON, tanda kurung kurawal ({) mewakili objek JSON

3

Key

Objek JSON berisi kunci yang hanya berupa string. Pasangan kunci / nilai membentuk objek JSON

4

Value

Setiap kunci memiliki nilai yang bisa berupa string, integer atau double dll

JSON - Parsing

Untuk mem-parsing objek JSON, kami akan membuat objek kelas JSONObject dan menentukan string yang berisi data JSON untuk itu. Sintaksnya adalah -

String in;
JSONObject reader = new JSONObject(in);

Langkah terakhir adalah mengurai JSON. File JSON terdiri dari objek yang berbeda dengan pasangan kunci / nilai yang berbeda, dll. Jadi JSONObject memiliki fungsi terpisah untuk mengurai setiap komponen file JSON. Sintaksnya diberikan di bawah ini -

JSONObject sys  = reader.getJSONObject("sys");
country = sys.getString("country");
			
JSONObject main  = reader.getJSONObject("main");
temperature = main.getString("temp");

Metode getJSONObjectmengembalikan objek JSON. MetodegetString mengembalikan nilai string dari kunci yang ditentukan.

Terlepas dari metode ini, ada metode lain yang disediakan oleh kelas ini untuk penguraian file JSON yang lebih baik. Metode ini tercantum di bawah -

Sr Tidak Metode & deskripsi
1

get(String name)

Metode ini hanya Mengembalikan nilai tetapi dalam bentuk tipe Objek

2

getBoolean(String name)

Metode ini mengembalikan nilai boolean yang ditentukan oleh kunci

3

getDouble(String name)

Metode ini mengembalikan nilai ganda yang ditentukan oleh kunci

4 getInt(String name)

Metode ini mengembalikan nilai integer yang ditentukan oleh kunci

5

getLong(String name)

Metode ini mengembalikan nilai panjang yang ditentukan oleh kunci

6

length()

Metode ini mengembalikan jumlah pemetaan nama / nilai di objek ini ..

7

names()

Metode ini mengembalikan larik yang berisi nama string dalam objek ini.

Contoh

Untuk bereksperimen dengan contoh ini, Anda dapat menjalankannya di perangkat sebenarnya atau di emulator.

Langkah Deskripsi
1 Anda akan menggunakan studio Android untuk membuat aplikasi Android.
2 Ubah file src / MainActivity.java untuk menambahkan kode yang diperlukan.
3 Ubah res / layout / activity_main untuk menambahkan komponen XML masing-masing
4 Ubah res / values ​​/ string.xml untuk menambahkan komponen string yang diperlukan
5 Jalankan aplikasi dan pilih perangkat android yang sedang berjalan dan instal aplikasi di atasnya dan verifikasi hasilnya

Berikut adalah konten file aktivitas utama yang dimodifikasi src/MainActivity.java.

package com.example.tutorialspoint7.myapplication;

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 ListView lv;

   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();
   }
   
   private class GetContacts extends AsyncTask<Void, Void, Void> {
      @Override
      protected void onPreExecute() {
         super.onPreExecute();
         Toast.makeText(MainActivity.this,"Json Data is 
            downloading",Toast.LENGTH_LONG).show();

      }

      @Override
      protected Void doInBackground(Void... arg0) {
         HttpHandler sh = new HttpHandler();
         // Making a request to url and getting response
         String url = "http://api.androidhive.info/contacts/";
         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);
         ListAdapter adapter = new SimpleAdapter(MainActivity.this, contactList,
            R.layout.list_item, new String[]{ "email","mobile"}, 
               new int[]{R.id.email, R.id.mobile});
         lv.setAdapter(adapter);
      }
   }
}

Berikut ini adalah konten xml yang dimodifikasi HttpHandler.java.

package com.example.tutorialspoint7.myapplication;

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;

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

Berikut ini adalah konten xml yang dimodifikasi res/layout/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="com.example.tutorialspoint7.myapplication.MainActivity">

   <ListView
      android:id="@+id/list"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content" />
</RelativeLayout>

Berikut ini adalah konten xml yang dimodifikasi res/layout/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/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>

Berikut ini adalah konten dari AndroidManifest.xml mengajukan.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tutorialspoint7.myapplication">

   <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>

Mari kita coba menjalankan aplikasi yang baru saja kita modifikasi. Saya berasumsi bahwa Anda telah membuat fileAVDsaat melakukan pengaturan lingkungan. Untuk menjalankan aplikasi dari Android studio, buka salah satu file aktivitas proyek Anda dan klik

ikon Run dari toolbar. Android studio menginstal aplikasi pada AVD Anda dan memulainya dan jika semuanya baik-baik saja dengan pengaturan dan aplikasi Anda, itu akan ditampilkan berikut jendela Emulator -

Contoh di atas menunjukkan data dari string json, Data tersebut berisi detail pemberi kerja serta informasi gaji.