📜  Android中的JSON解析

📅  最后修改于: 2021-05-10 13:45:21             🧑  作者: Mango

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\"}] }")
}

输出:在模拟器上运行

输出

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处前往由我们的专家精心策划的指南,以使您立即做好行业准备!