使用 Swift 5 和 Codable 解码 json 中的字典

Decode a dictionary in json using Swift 5 and Codable

我正在尝试使用 Swift 5.2 和 Codable 解码 JSON(其中字典中的值对象不相似)中的数据,任何关于执行此操作的建议,代码将是易于扩展,可以在 json?

中添加更多食物
{
    "main courses": [
        {
            "date availabiliy": "June 12, 2017 1:23:31 PM",
            "price": 10.29,
            "name": "chicken_rice",
            "receipe": "page 16"
        },
        {
            "date availabiliy": "July 12, 2017 1:23:31 PM",
            "price": 12.29,
            "name": "beef_rice",
            "receipe": "page 5"
        },
        {
           "date availabiliy": "July 12, 2017 1:23:31 PM",
            "price": 14.49,
            "name": "California roll",
            "receipe": "page 25"
        }
    ],
    "desserts": [
        {
            "popularity": 75,
            "calory": "high",
            "name": "Avacado, Basil,and cream",
            "date availabiliy": "July 12, 2017 1:23:31 PM",
            "taste": "sweet",
        },
        {
           "popularity": 39,
            "calory": "med",
            "name": "ice cream",
            "date availabiliy": "July 22, 2017 1:23:31 PM",
            "taste": "sweet",
        },
    ],
}

谢谢! 凸轮

此模型创建自 https://app.quicktype.io/

import Foundation

// MARK: - Response
struct Response: Codable {
    let mainCourses: [MainCourse]
    let desserts: [Dessert]

    enum CodingKeys: String, CodingKey {
        case mainCourses = "main courses"
        case desserts = "desserts"
    }
}

// MARK: - Dessert
struct Dessert: Codable {
    let popularity: Int
    let calory, name, dateAvailabiliy, taste: String

    enum CodingKeys: String, CodingKey {
        case popularity, calory, name
        case dateAvailabiliy = "date availabiliy"
        case taste
    }
}

// MARK: - MainCourse
struct MainCourse: Codable {
    let dateAvailabiliy: String
    let price: Double
    let name, receipe: String

    enum CodingKeys: String, CodingKey {
        case dateAvailabiliy = "date availabiliy"
        case price, name, receipe
    }
}

像这样使用它

let response = try? newJSONDecoder().decode(Response.self, from: jsonData)