添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何在Kotlin中使用一个循环来打印JSON数组的键值?

0 人关注

我正在使用一个API,它给我一个JSON响应。从这个JSON中我创建了模型类。在这些类中。这些是我的模型类。

class Json3(
    val result : Result3){}
class Result3(
    val pic1:String,
    val item_name:String,
    val shop_name: String,
    val item_size:List<ItemSize>,
    val item_description:String,
    val price:String ){}
class ItemSize(
    val name:String,
    val value:String){}

我想从项目大小中访问名称和值并打印它们。我怎样才能用一个循环来实现这个目标? 这是我的JSON。

{"result": {
"product_id": 283946,
"shop_rating": 5,
"shop_reviews_count": 476,
"occasion_id": 94,
"section_id": 1,
"section": "Flower",
"pickup": false,
"preparation_time": "0 mins",
"is_favorite": false,
"item_sold_by": "Quantity",
"item_size": [
    "name": "Height",
    "value": "29cm"
    "name": "Width",
    "value": "52cm"

我想从item_size中获取数值,并在一些循环的帮助下打印出这样的东西。高度:29厘米/宽度:52厘米。这是我到目前为止所尝试的。当我把它设置为 itemsizename 时,我只得到最后的名字和值。 但是我想从数组中得到所有的名字和值。比如说。高度:29厘米/宽度:52厘米和长度(如果它将进一步可用)。

val obj = JSONObject(json)
                val getObject = obj.getJSONObject("result")
                val getArray = getObject.getJSONArray("item_size")
val obj = JSONObject(json)
                val getObject = obj.getJSONObject("result")
                val getArray = getObject.getJSONArray("item_size")
                for (i in 0 until getArray.length()) {
                    val objects: JSONObject = getArray.getJSONObject(i)
                   val     parameter = objects["name"].toString()
                  val   parameterValue = objects["value"].toString()
itemsizename.text = parameter + ": " + parameterValue }
    
4 个评论
show us your json response?
sara
完成了。请看一下。
嗨 @sara 看到了你更新的for loop代码,显然代码会覆盖数值并显示列表的最后一项,你可以使用recyclerview来打印所有的数值。
sara
你能告诉我怎么做吗?是否有任何其他的循环可以代替recyclerview?
android
loops
kotlin
sara
sara
发布于 2021-04-28
1 个回答
Awesome Jim
Awesome Jim
发布于 2021-04-29
已采纳
0 人赞同

首先从响应的JSONObject中获取item_size的JSONArray。

val item_sizeJsonArray = resultObject.getJSONArray("item_size")

第二步:- 更新你的Result3类,让item_size成为一个列表而不是数组。

val item_size:List<ItemSize>, 

使用下面的for循环来获取ItemSize列表,并传递item_sizeJsonArray。

fun getItemSizeList(itemsJsonList:JSONArray): List<ItemSize> {
    val items: ArrayList<ItemSize> = ArrayList()
    for (i in 0 until itemsJsonList.length()) {
        val obj = itemsJsonList[i] as JSONObject
        val name: String = obj.getString("name")
        val value: String = obj.getString("value")
        val item = ItemSize(name, value)
        items.add(item)
    return items

或者你可以使用Gson

fun getItemSizeListWithGson(itemsJsonList: JSONArray): List<ItemSize> {
val items: ArrayList<ItemSize> = ArrayList()
for (i in 0 until itemsJsonList.length()) {
    val item = Gson().fromJson(itemsJsonList[i].toString(), ItemSize::class.java)
    items.add(item)
return items

纯粹的for循环

 val item_sizeJsonArray = resultObject.getJSONArray("item_size")
    for (i in 0 until item_sizeJsonArray.length()) {
                val obj = item_sizeJsonArray[i] as JSONObject