首页 > 解决方案 > 遍历 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?
}

标签: swift

解决方案


首先,请以大写字母开头类、结构和其他类型的名称。

如果 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)
}

推荐阅读