Swift Codable:字典数组

杰伊·斯特罗恩(Jay Strawn)

我有一个来自Yelp的JSON对象,我无法弄清楚如何使用Swift Codable访问titlein categories这是JSON(已删除一些元素以便于阅读):

{
    "businesses": [
        {
        "id": "fob-poke-bar-seattle-2",
        "name": "FOB Poke Bar",
        "is_closed": false,
        "review_count": 421,
        "categories": [
            {
                "alias": "poke",
                "title": "Poke"
            },
            {
                "alias": "salad",
                "title": "Salad"
            },
            {
                "alias": "hawaiian",
                "title": "Hawaiian"
            }
        ],
        "rating": 5,
        "coordinates": {
            "latitude": 47.6138005187095,
            "longitude": -122.343868017197
        },
        "price": "$$",
        "location": {
            "city": "Seattle",
            "zip_code": "98121",
            "country": "US",
            "state": "WA",
            "display_address": [
                "220 Blanchard St",
                "Seattle, WA 98121"
            ]
        },
    }

它在JSON Viewer中

我访问的第一级性能,如name容易,我访问lattitudelongitude像这样:

class Business: Codable {

  var name: String
  var rating: Double
  var coordinates: Coordinates

  struct Coordinates: Codable {
    var latitude: Double
    var longitude: Double

    init(lat: Double, long: Double) {
      self.latitude = lat
      self.longitude = long
    }
  }

  init(name: String, rating: Double, coordinates: Coordinates) {
    self.name = name
    self.rating = rating
    self.coordinates = coordinates
    self.categories = categories
  }
}

有人可以指出我访问categories->的正确方向title吗?Coordinates易于访问,但是categories很多字典。谢谢!

瓦迪安

Coordinates除了的值categories是一个数组外,它的模式与之相同

struct Root : Decodable {
    let businesses : [Business]
}

struct Business: Decodable {

    let name: String
    let rating: Int
    let coordinates: Coordinates

    let categories : [Category]

    struct Coordinates: Codable {
        let latitude: Double
        let longitude: Double
    }

    struct Category: Codable {
        let alias: String
        let title: String
    }
}

let root = try decoder.decode(Root.self, from: data)
for business in root.businesses {
        for category in business.categories {
            print(category.title)
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章