Android Kotlin Volley 如何从 JSONArray 中获取价值

Posted

技术标签:

【中文标题】Android Kotlin Volley 如何从 JSONArray 中获取价值【英文标题】:Android Kotlin Volley How to get value from JSONArray 【发布时间】:2021-09-28 11:40:32 【问题描述】:

我想通过 Volley for 循环在“media_gallery_entries”JSONArray 中获取“文件”

排球

val item = ArrayList<RecyData>()
val jsonRequest = object : JsonObjectRequest(Request.Method.GET, url, null,

    Response.Listener  response ->

       try 

            val jsonArrayItems = response.getJSONArray("items")
            val jsonSize = jsonArrayItems.length()

            for (i in 0 until jsonSize) 
                val jsonObjectItems = jsonArrayItems.getJSONObject(i)
                val pName = jsonObjectItems.getString("name")
                val pPrice = jsonObjectItems.getInt("price")
                item.add(RecyData(pName, pPrice, pImage))
            
        catch (e: JSONException) 
             e.printStackTrace()
       

数据


   "items": [
       
           "id": 1,
           "sku": "10-1001",
           "name": "item01",
           "price": 100,
           "media_gallery_entries": [
               
                   "id": 1,
                   "file": "//1/0/10-28117_1_1.jpg"
               
           ]
       
   ]

【问题讨论】:

【参考方案1】:

您可以使用一些解析库,例如 Gson,而不是手动解析总是容易出错的 Gson,它经过充分测试并且不太可能导致任何问题

要首先使用Gson,您需要在 build.gradle 中添加依赖项

implementation 'com.google.code.gson:gson:2.8.7'

现在定义映射到 JSON 响应的 kotlin 类型

class Media(
        val id: Int,
        val file: String
)

class Entry(
        val id: Int,
        val sku: String,
        val name: String,
        val price: Int,
        val media_gallery_entries: List<Media>
)

现在响应监听器就可以了

try
    val jsonArrayItems = response.getJSONArray("items")
    val token = TypeToken.getParameterized(ArrayList::class.java, Entry::class.java).type
    val result:List<Entry> = Gson().fromJson(jsonArrayItems.toString(), token)
    // Do something with result

catch (e: JSONException) 
    e.printStackTrace()

【讨论】:

【参考方案2】:

val pPrice = jsonObjectItems.getInt("price")这一行之后试试这段代码

 val mediaEntryArr = jsonObjectItems.getJSONArray("media_gallery_entries")
                for(j in 0 until mediaEntryArr.length())
                    val mediaEntryObj = mediaEntryArr.getJSONObject(j)
                    val id = mediaEntryObj.getString("id")
                    val file = mediaEntryObj.getString("file")
                    Log.e("mediaEntry----",""+ Gson().toJson(mediaEntryObj))
                    Log.e("id----",""+ id)
                    Log.e("file----",""+ file)
                

【讨论】:

是的,items 数组的外循环media_gallery_entries 数组的内循环 为什么不使用Gson 来解析整个响应

以上是关于Android Kotlin Volley 如何从 JSONArray 中获取价值的主要内容,如果未能解决你的问题,请参考以下文章

Android Kotlin Volley 如何发送 JSON 数据

Android kotlin解析器Gson Volley

Kotlin编程开发Android运用程序(Volley+Gson依赖库)

kotlin volley android POST 多部分/表单数据

如何纠正 android kotlin 发送格式错误的 JSON

如何在 android 中使用 Gson 或 VOLley 从 json 中删除空值