在没有数组键的情况下解析 Swift 中的 JSON

Parsing JSON in Swift without array key

我有一个 JSON-响应:

[
    [{
            "id": "1",
            "name": "Toyota",
            "model": "Camry"
        },
        {
            "id": "2",
            "name": "Nissan",
            "model": "Almera"
        }
    ],
    {
        "count": "1234",
        "page": "1"
    }
]

我创建了可解码模型:

struct Car: Decodable {
   var id: String?
   var name: String?
   var model: String?
}

我正在尝试像这样提取数据以供测试:

let carsResponse = try JSONDecoder().decode([[Car]].self, from: data)
print(carsResponse[0])

我有一个错误:

本应解码数组,但却找到了字典。

怎么了?

这种格式很糟糕,所以你需要手动解码外层容器,但这并不难:

struct CarResponse: Decodable {
    var cars: [Car]

    init(from decoder: Decoder) throws {
        var container = try decoder.unkeyedContainer()
        cars = try container.decode([Car].self) // Decode just first element
    }
}

let carsResponse = try JSONDecoder().decode(CarResponse.self, from: data)
print(carsResponse.cars)