android - 如何使用 Kotlin 中的循环从 JSON 数组打印键值?
问题描述
我正在使用一个 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 }
解决方案
首先从响应 JSONObject 中获取 item_size JSONArray
val item_sizeJsonArray = resultObject.getJSONArray("item_size")
第 2 步: - 更新您的 Result3 类并让 item_size 成为列表而不是 Array
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
val name: String = obj.getString("name")
val value: String = obj.getString("value")
}
推荐阅读
- html - 添加标志图像以选择选项
- java - 如何删除 sonarqube equals 和 hashcode 重复代码验证?
- javascript - 在 javascript 过滤器之后重新加载第 n 个子类
- google-apps-script - 如何让环聊聊天机器人在受到第一个用户的欢迎时与另一个用户交谈?
- python - 使用 pyinstaller 构建窗口化 python 应用程序时,unix 可执行文件完美运行,但生成的 .app 文件打不开
- amazon-web-services - 如何使用带有 Terraform 的 AWS 启动模板启动 AWS EC2 实例?
- java - 测试从另一个方法调用的方法
- .net - centos 7 的 Docker 设置
- rest - 乐观锁:使用另一个资源修改一个资源
- ios - 如何将 UITableView 的底部约束设置为 UIView 的顶部约束?