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
Contoh di atas menunjukkan data dari string json, Data tersebut berisi detail pemberi kerja serta informasi gaji.