Theoretical Paper
- Computer Organization
- Data Structure
- Digital Electronics
- Object Oriented Programming
- Discrete Mathematics
- Graph Theory
- Operating Systems
- Software Engineering
- Computer Graphics
- Database Management System
- Operation Research
- Computer Networking
- Image Processing
- Internet Technologies
- Micro Processor
- E-Commerce & ERP
- Dart Programming
- Flutter Tutorial
- Numerical Methods Tutorials
- Flutter Tutorials
- Kotlin Tutorial
Practical Paper
Industrial Training
JSON Parsing using URL
JSON refers to JavaScript Object Notation, and it is a programming language. JSON is used to parse the data between the server and the client. It is minimal, textual and a subset of JavaScript. It is the alternative to XML parsing.
The advantage of JSON over XML
- JSON is faster and easier than XML for AJAX applications.
- Unlike XML, it is shorter and quicker to read and write.
- It uses an array.
JSON Object
A JSON object contains key/value pairs like a map. The keys are strings and the values are the JSON types. A comma separates keys and values (,). The curly brace {} represents the JSON object.
Kotlin JSON Parsing using URL Example
In this example, we parse the JSON data from URL and bind them into a ListView. The JSON data contains the "id" "name" "email".
JSON data index.html
Create a JSON file index.html.
{"info":[ {"name":"Ajay","id":"111","email":"ajay@gmail.com"}, {"name":"John","id":"112","email":"john@gmail.com"}, {"name":"Rahul","id":"113","email":"rahul@gmail.com"}, {"name":"Maich","id":"114","email":"maich@gmail.com"}, {"name":"Vikash","id":"115","email":"vikash@gmail.com"}, {"name":"Mayank","id":"116","email":"mayank@gmail.com"}, {"name":"Prem","id":"117","email":"prem@gmail.com"}, {"name":"Chandan","id":"118","email":"chandan@gmail.com"}, {"name":"Soham","id":"119","email":"soham@gmail.com"}, {"name":"Mukesh","id":"120","email":"mukesh@gmail.com"}, {"name":"Ajad","id":"121","email":"ajad@gmail.com"} ] } {"info":[ {"name":"Ajay","id":"111","email":"ajay@gmail.com"}, {"name":"John","id":"112","email":"john@gmail.com"}, {"name":"Rahul","id":"113","email":"rahul@gmail.com"}, {"name":"Maich","id":"114","email":"maich@gmail.com"}, {"name":"Vikash","id":"115","email":"vikash@gmail.com"}, {"name":"Mayank","id":"116","email":"mayank@gmail.com"}, {"name":"Prem","id":"117","email":"prem@gmail.com"}, {"name":"Chandan","id":"118","email":"chandan@gmail.com"}, {"name":"Soham","id":"119","email":"soham@gmail.com"}, {"name":"Mukesh","id":"120","email":"mukesh@gmail.com"}, {"name":"Ajad","id":"121","email":"ajad@gmail.com"} ] }
While executing the JSON file (index.html) looks like as:
activity_main.xml
Add the ListView in the activity_main.xml layout file.
< ?xml version="1.0" encoding="utf-8"?> < android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="example.javatpoint.com.kotlinjsonparsing.MainActivity"> < ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"> < /ListView> < /android.support.constraint.ConstraintLayout> < ?xml version="1.0" encoding="utf-8"?> < android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="example.javatpoint.com.kotlinjsonparsing.MainActivity"> < ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"> < /ListView> < /android.support.constraint.ConstraintLayout>
build.gradle
Add the following okhttp dependency in the build.gradle file.
compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com.squareup.okhttp3:okhttp:3.8.1'
Model.kt
Create a data model class Model.kt which includes the information String "id", String "name" and String "email".
package example.javatpoint.com.kotlinjsonparsing public class Model{ lateinit var id:String lateinit var name:String lateinit var email:String constructor(id: String,name:String,email:String) { this.id = id this.name = name this.email = email } constructor() } package example.javatpoint.com.kotlinjsonparsing public class Model{ lateinit var id:String lateinit var name:String lateinit var email:String constructor(id: String,name:String,email:String) { this.id = id this.name = name this.email = email } constructor() }
adapter_layout.xml
Create an adapter_layout.xml file in the layout directory which contains the row items for ListView.
< ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout" android:padding="5dp" android:orientation="vertical"> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvId" android:layout_margin="5dp" android:textSize="16dp"/> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvName" android:textSize="16dp" android:layout_margin="5dp"/> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvEmail" android:layout_margin="5dp" android:textSize="16dp"/> < /LinearLayout> < ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout" android:padding="5dp" android:orientation="vertical"> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvId" android:layout_margin="5dp" android:textSize="16dp"/> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvName" android:textSize="16dp" android:layout_margin="5dp"/> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvEmail" android:layout_margin="5dp" android:textSize="16dp"/> < /LinearLayout>
CustomAdapter.kt
Create a custom adapter class CustomAdapter.kt and extend BaseAdapter to handle the custom ListView.
package example.javatpoint.com.kotlinjsonparsing import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter import android.widget.LinearLayout import android.widget.TextView class CustomAdapter(context: Context,arrayListDetails:ArrayList< Model>) : BaseAdapter(){ private val layoutInflater: LayoutInflater private val arrayListDetails:ArrayList< Model> init { this.layoutInflater = LayoutInflater.from(context) this.arrayListDetails=arrayListDetails } override fun getCount(): Int { return arrayListDetails.size } override fun getItem(position: Int): Any { return arrayListDetails.get(position) } override fun getItemId(position: Int): Long { return position.toLong() } override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? { val view: View? val listRowHolder: ListRowHolder if (convertView == null) { view = this.layoutInflater.inflate(R.layout.adapter_layout, parent, false) listRowHolder = ListRowHolder(view) view.tag = listRowHolder } else { view = convertView listRowHolder = view.tag as ListRowHolder } listRowHolder.tvName.text = arrayListDetails.get(position).name listRowHolder.tvEmail.text = arrayListDetails.get(position).email listRowHolder.tvId.text = arrayListDetails.get(position).id return view } } private class ListRowHolder(row: View?) { public val tvName: TextView public val tvEmail: TextView public val tvId: TextView public val linearLayout: LinearLayout init { this.tvId = row?.findViewById< TextView>(R.id.tvId) as TextView this.tvName = row?.findViewById< TextView>(R.id.tvName) as TextView this.tvEmail = row?.findViewById< TextView>(R.id.tvEmail) as TextView this.linearLayout = row?.findViewById< LinearLayout>(R.id.linearLayout) as LinearLayout } } package example.javatpoint.com.kotlinjsonparsing import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter import android.widget.LinearLayout import android.widget.TextView class CustomAdapter(context: Context,arrayListDetails:ArrayList< Model>) : BaseAdapter(){ private val layoutInflater: LayoutInflater private val arrayListDetails:ArrayList< Model> init { this.layoutInflater = LayoutInflater.from(context) this.arrayListDetails=arrayListDetails } override fun getCount(): Int { return arrayListDetails.size } override fun getItem(position: Int): Any { return arrayListDetails.get(position) } override fun getItemId(position: Int): Long { return position.toLong() } override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? { val view: View? val listRowHolder: ListRowHolder if (convertView == null) { view = this.layoutInflater.inflate(R.layout.adapter_layout, parent, false) listRowHolder = ListRowHolder(view) view.tag = listRowHolder } else { view = convertView listRowHolder = view.tag as ListRowHolder } listRowHolder.tvName.text = arrayListDetails.get(position).name listRowHolder.tvEmail.text = arrayListDetails.get(position).email listRowHolder.tvId.text = arrayListDetails.get(position).id return view } } private class ListRowHolder(row: View?) { public val tvName: TextView public val tvEmail: TextView public val tvId: TextView public val linearLayout: LinearLayout init { this.tvId = row?.findViewById< TextView>(R.id.tvId) as TextView this.tvName = row?.findViewById< TextView>(R.id.tvName) as TextView this.tvEmail = row?.findViewById< TextView>(R.id.tvEmail) as TextView this.linearLayout = row?.findViewById< LinearLayout>(R.id.linearLayout) as LinearLayout } }
MainActivity.kt
Add the following code in MainActivity.kt class file. This class read the JSON data in the form of a JSON object. Using the JSON object, we read the JSON array data. The JSON data are bind in ArrayList.
package example.javatpoint.com.kotlinjsonparsing import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.ListView import android.widget.ProgressBar import okhttp3.* import org.json.JSONArray import org.json.JSONObject import java.io.IOException import kotlin.collections.ArrayList class MainActivity : AppCompatActivity() { lateinit var progress:ProgressBar lateinit var listView_details: ListView var arrayList_details:ArrayList< Model> = ArrayList(); //OkHttpClient creates connection pool between client and server val client = OkHttpClient() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) progress = findViewById(R.id.progressBar) progress.visibility = View.VISIBLE listView_details = findViewById< ListView>(R.id.listView) as ListView run("http://10.0.0.7:8080/jsondata/index.html") } fun run(url: String) { progress.visibility = View.VISIBLE val request = Request.Builder() .url(url) .build() client.newCall(request).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { progress.visibility = View.GONE } override fun onResponse(call: Call, response: Response) { var str_response = response.body()!!.string() //creating json object val json_contact:JSONObject = JSONObject(str_response) //creating json array var jsonarray_info:JSONArray= json_contact.getJSONArray("info") var i:Int = 0 var size:Int = jsonarray_info.length() arrayList_details= ArrayList(); for (i in 0.. size-1) { var json_objectdetail:JSONObject=jsonarray_info.getJSONObject(i) var model:Model= Model(); model.id=json_objectdetail.getString("id") model.name=json_objectdetail.getString("name") model.email=json_objectdetail.getString("email") arrayList_details.add(model) } runOnUiThread { //stuff that updates ui val obj_adapter : CustomAdapter obj_adapter = CustomAdapter(applicationContext,arrayList_details) listView_details.adapter=obj_adapter } progress.visibility = View.GONE } }) } } package example.javatpoint.com.kotlinjsonparsing import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.ListView import android.widget.ProgressBar import okhttp3.* import org.json.JSONArray import org.json.JSONObject import java.io.IOException import kotlin.collections.ArrayList class MainActivity : AppCompatActivity() { lateinit var progress:ProgressBar lateinit var listView_details: ListView var arrayList_details:ArrayList< Model> = ArrayList(); //OkHttpClient creates connection pool between client and server val client = OkHttpClient() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) progress = findViewById(R.id.progressBar) progress.visibility = View.VISIBLE listView_details = findViewById< ListView>(R.id.listView) as ListView run("http://10.0.0.7:8080/jsondata/index.html") } fun run(url: String) { progress.visibility = View.VISIBLE val request = Request.Builder() .url(url) .build() client.newCall(request).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { progress.visibility = View.GONE } override fun onResponse(call: Call, response: Response) { var str_response = response.body()!!.string() //creating json object val json_contact:JSONObject = JSONObject(str_response) //creating json array var jsonarray_info:JSONArray= json_contact.getJSONArray("info") var i:Int = 0 var size:Int = jsonarray_info.length() arrayList_details= ArrayList(); for (i in 0.. size-1) { var json_objectdetail:JSONObject=jsonarray_info.getJSONObject(i) var model:Model= Model(); model.id=json_objectdetail.getString("id") model.name=json_objectdetail.getString("name") model.email=json_objectdetail.getString("email") arrayList_details.add(model) } runOnUiThread { //stuff that updates ui val obj_adapter : CustomAdapter obj_adapter = CustomAdapter(applicationContext,arrayList_details) listView_details.adapter=obj_adapter } progress.visibility = View.GONE } }) } }
AndroidManifest.xml
Add the Internet permission in AndroidManifest.xml file.
< uses-permission android:name="android.permission.INTERNET"/> < uses-permission android:name="android.permission.INTERNET"/>
Output: