JSON(JavaScript对象表示法)是一种用于交换服务器数据的简单数据交换格式,它是XML的更好替代方案。这是因为JSON是一种轻量级的结构化语言。 Android支持所有JSON类,例如JSONStringer,JSONObject,JSONArray和所有其他形式,以解析JSON数据并由程序获取所需的信息。 JSON的主要优点是它与语言无关,并且JSON对象将包含像键/值对之类的数据。通常,JSON节点将以方括号([)或大括号({)开头。方括号和大括号的主要区别在于方括号([)表示JSONArray节点的开始。而大括号({)表示一个JSONObject 。因此,需要调用适当的方法来获取数据。有时JSON数据以[。然后,我们需要使用getJSONArray()方法来获取数据。同样,如果它以{开头,那么我们需要使用getJSONobject()方法。 JSON文件的语法如下:
{
"Name": "GeeksforGeeks",
"Estd": 2009,
"age": 10,
"address": {
"buildingAddress": "5th & 6th Floor Royal Kapsons, A- 118",
"city": "Sector- 136, Noida",
"state": "Uttar Pradesh (201305)",
"postalCode": "201305"
},
在本文中,我们将在Android中解析JSON文件。请注意,我们将使用Kotlin语言实施此项目。
分步实施
要在Android中解析JSON文件,请执行以下步骤:
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。
步骤2:使用activity_main.xml文件
转到代表应用程序UI的activity_main.xml文件。创建一个ListView ,如图所示。以下是activity_main.xml文件的代码。
XML
XML
Kotlin
import android.os.Bundle
import android.util.Log
import android.widget.ListAdapter
import android.widget.ListView
import android.widget.SimpleAdapter
import androidx.appcompat.app.AppCompatActivity
import org.json.JSONException
import org.json.JSONObject
import java.util.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// private string declare in the latter section of the program
val jsonStr = listData
try {
// Create a userList string hashmap arraylist
val userList = ArrayList>()
// Declaring the listView from the layout file
val lv = findViewById(R.id.user_list)
// Initializing the JSON object and extracting the information
val jObj = JSONObject(jsonStr)
val jsonArry = jObj.getJSONArray("users")
for (i in 0 until jsonArry.length()) {
val user = HashMap()
val obj = jsonArry.getJSONObject(i)
user["name"] = obj.getString("name")
user["designation"] = obj.getString("designation")
user["location"] = obj.getString("location")
userList.add(user)
}
// ListAdapter to broadcast the information to the list elements
val adapter: ListAdapter = SimpleAdapter(
this, userList, R.layout.list_row,
arrayOf("name", "designation", "location"), intArrayOf(
R.id.name,
R.id.designation, R.id.location
)
)
lv.adapter = adapter
} catch (ex: JSONException) {
Log.e("JsonParser Example", "unexpected JSON exception", ex)
}
}
// JSON object in the form of input stream
private val listData: String
get() = ("{ \"users\" :[" +
"{\"name\":\"Ace\",\"designation\":\"Engineer\",\"location\":\"New York\"}" +
",{\"name\":\"Tom\",\"designation\":\"Director\",\"location\":\"Chicago\"}" +
",{\"name\":\"Tim\",\"designation\":\"Charted Accountant\",\"location\":\"Sunnyvale\"}] }")
}
步骤3:创建另一个布局资源文件
转到应用程序> res>布局>右键单击>新建>布局资源文件,然后创建另一个布局list_row.xml以在ListView中显示数据。下面是list_row.xml文件的代码。
XML格式
步骤4:使用MainActivity.kt文件
转到MainActivity.kt文件,并参考以下代码。下面是MainActivity.kt文件的代码。在代码内部添加了注释,以更详细地了解代码。
科特林
import android.os.Bundle
import android.util.Log
import android.widget.ListAdapter
import android.widget.ListView
import android.widget.SimpleAdapter
import androidx.appcompat.app.AppCompatActivity
import org.json.JSONException
import org.json.JSONObject
import java.util.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// private string declare in the latter section of the program
val jsonStr = listData
try {
// Create a userList string hashmap arraylist
val userList = ArrayList>()
// Declaring the listView from the layout file
val lv = findViewById(R.id.user_list)
// Initializing the JSON object and extracting the information
val jObj = JSONObject(jsonStr)
val jsonArry = jObj.getJSONArray("users")
for (i in 0 until jsonArry.length()) {
val user = HashMap()
val obj = jsonArry.getJSONObject(i)
user["name"] = obj.getString("name")
user["designation"] = obj.getString("designation")
user["location"] = obj.getString("location")
userList.add(user)
}
// ListAdapter to broadcast the information to the list elements
val adapter: ListAdapter = SimpleAdapter(
this, userList, R.layout.list_row,
arrayOf("name", "designation", "location"), intArrayOf(
R.id.name,
R.id.designation, R.id.location
)
)
lv.adapter = adapter
} catch (ex: JSONException) {
Log.e("JsonParser Example", "unexpected JSON exception", ex)
}
}
// JSON object in the form of input stream
private val listData: String
get() = ("{ \"users\" :[" +
"{\"name\":\"Ace\",\"designation\":\"Engineer\",\"location\":\"New York\"}" +
",{\"name\":\"Tom\",\"designation\":\"Director\",\"location\":\"Chicago\"}" +
",{\"name\":\"Tim\",\"designation\":\"Charted Accountant\",\"location\":\"Sunnyvale\"}] }")
}