SWIFT 4 嵌套 JSON 结构 - Codable

SWIFT 4 nested JSON Struct - Codable

我在创建一个结构来解析 Swift 中的 JSON 时遇到问题 4。我能够解析小的 JSONs 并且 JSONDecoder 似乎工作正常。只需要帮助创建一个结构来解析 JSON 这样的:

{
    "main": {
        "solutions": [
                    {
                    "exersises": [
                                     {
                                     "book_title": "test",
                                     "release_date": "2015-01-12T11:00",
                                     "price": 100,
                                     "additional": [
                                                   {
                                                   "item1": "test",
                                                   "item2": "test",
                                                   "number": 1
                                                   },
                                                   {
                                                    "item1": "test2",
                                                    "item2": "test2",
                                                    "number": 2
                                                   }
                                                   ],
                                     "availability": "Yes",
                                     "item_id": 43534
                                     }
                                     ]


                    }

                    ]
    }
}

例如,我需要什么样的结构才能获得 book_title 的值?

真的很简单。您的主要问题很可能是根元素。让我为您准备第一层或第二层。

let decoded = try JSONDecoder().decode(MainJSON.self, from: data)

class MainJSON: Codable {
    var main:SolutionJSON?
}

class SolutionJSON: Codable {
    var exercises:[ExercisesJSON]?
}

class ExercisesJSON: Codable {
    var bookTitle: String?
    var releaseDate: String?
    var price: Double?
    ... etc

    enum CodingKeys: String, CodingKey {
        case bookTitle = "book_title"
        case releaseDate = "release_date"
        case price = "price"
    }
}

ExerciseJSON 还使用 Codable 接口,如果它们不匹配,可以将 json 属性重新映射到 swift 属性。希望这有帮助。

我更愿意给出一个通用的解决方案,不仅针对这种情况

非常简单,只需从 GITHUB 下载 运行 这个 MACOS APP 运行 它在你的 mac 中 XCODE 但你的 JSON 在它里面,
它将为任何复杂的 JSON

制作模型

笔记

1 如果 JSON 键的第一个字符是大写的,它将变小 , 所以在复制模型后你需要像 JSON

一样改变它

2 如果两个 JSON 对象具有相同的结构和相同的键名,则只有一个模型