swift - 遍历 JSON 数组 | 斯威夫特 5
问题描述
我需要对以下 JSON 数组中的每个 triid 实例执行操作 - 如何使用 forEach 循环遍历每个 triid 实例?目标是将每个 triid 实例传递给另一个函数,该函数一次只排除一个 triid 值。
JSON数组的结构如下:
[
{
"name": "mobile",
"orderid": 1,
"trialid": 27
},
{
"name": "mobile",
"orderid": 1,
"trialid": 33
}
]
以下是我目前正在尝试的 - 如何在此处执行 foreach 以循环遍历每个对象:
var structure = [testStructure]()
func fetch() {
guard let url = URL(string: "test.com")
else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = "id=1".data(using: .utf8)
URLSession.shared.dataTask(with: request) { data, _, error in
guard let data = data else { return }
do {
let nav = try JSONDecoder().decode(structure, from: data)
structure.forEach ..
}
catch {
print(error)
}
}.resume()
}
struct testStructure: Decodable {
let name: String?
let orderid: Int?
let trialid: Int?
}
解决方案
首先,请以大写字母开头类、结构和其他类型的名称。
如果 API JSON 响应包含一个数组,您需要将其解码为数组类型,如下所示:
let nav = try JSONDecoder().decode([TestStructure].self, from: data)
然后您可以遍历解码的结构数组(完整代码):
import UIKit
struct TestStructure: Decodable {
let name: String?
let orderid: Int?
let trialid: Int?
}
func fetch() {
guard let url = URL(string: "test.com")
else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = "id=1".data(using: .utf8)
URLSession.shared.dataTask(with: request) { data, _, error in
guard let data = data else { return }
do {
let nav = try JSONDecoder().decode([TestStructure].self, from: data)
nav.forEach { testStructure in
// do whatever you want here
if let trialid = testStructure.trialid {
processingTrialid(trialid)
}
}
}
catch {
print(error)
}
}.resume()
}
func processingTrialid(_ trialid: Int) {
print("trialid: ", trialid)
}
推荐阅读
- java - Groovy 脚本错误:java.io.NotSerializableException:com.xlson.groovycsv.CsvIterator
- ravendb - RavenDB 4+ 分页查询,字段不同
- r - 在 R 中,这个括号 `[` 是什么?
- php - Laravel:使用外键从表中获取数据
- python - 在查询集中 Django DRF 中分别获取每个项目的计数
- flash-memory - Teraterm linux相当于将二进制文件推送到设备
- ubuntu - 如何防止ubuntu强制关机?
- java - 在简单的速度报告中实现递归
- gtk - 如何获取自定义 gtk 小部件的大小?
- ruby-on-rails - seed.rb 是名词还是动词?