首页 > 解决方案 > 使用 API 解码 JSON 并将产品添加到字典中的数组

问题描述

我是 Swift 初学者,我正在尝试从网络请求中解码 JSON 对象。我正在尝试将产品放入一个数组中,以便稍后将它们用于 UI。目前我一直在解码 JSON 并将它们放在一个数组中。

这是我尝试使用的 JSON 的简化版本(但可以在 url 中找到完整的 JSON):

{
  "items": [
    {
      "product": {
        "name": "Product name"
      }
    }
  ]
}

这是到目前为止的 Swift 代码。

// Models
struct Root: Codable {
    let items: [Item]
}

struct Item: Codable {
    let product: Product
}

struct Product: Codable {
    let name: String
}

//Product array
var productArray: [Product] = []

// URL and data fetching
let urlString: String = "https://api.jsonbin.io/b/60832bec4465377a6bc6b6e6"

func fetchData() {
    
    guard let url = URL(string: urlString) else {
        return
    }
    
    let task = URLSession.shared.dataTask(with: url) { data, _, error in
        
        guard let data = data, error == nil else {
            return
        }
        
        do {
            let result = try JSONDecoder().decode(Root.self, from: data)
            
            DispatchQueue.main.async {
                productArray = result
            }
            
        } catch {
            print(error)
        }
    }
    
    task.resume()
}

fetchData()

如果有人知道我如何克服这个问题,我将非常感谢您的帮助。目前被困在这几个小时,我似乎无法弄清楚。提前致谢!

标签: arraysjsonswiftdictionarydecoding

解决方案


只是数组map_items

DispatchQueue.main.async {
   productArray = result.items.map(\.product)
}

推荐阅读