SWIFT 4,Xcode 9,JSON解码器

时间:2017-12-22 05:33:09

标签: json swift4 decoder xcode9-beta

我现在很困惑。我试图在一年中制作一个JSON RETURN,制作品牌和型号。它被埋在一系列字典中,解码器很难将它们拉出来。我做错了什么?

public struct Page: Decodable {
let Count: Int
let Message: String
let SearchCriteria: String
let Results: [car]}


public struct car: Decodable {
let ModelYear: String
let Make: String
let Model: String
let VIN: String}


        let session = URLSession.shared
        let components = NSURLComponents()
        components.scheme  = "https"
        components.host = "vpic.nhtsa.dot.gov"
        components.path = "/api/vehicles/decodevinvaluesextended/\(VIN)"
        components.queryItems = [NSURLQueryItem]() as [URLQueryItem]
        let queryItem1 = NSURLQueryItem(name: "Format", value: "json")
        components.queryItems!.append(queryItem1 as URLQueryItem)
        print(components.url!)

 let task =  session.dataTask(with: components.url!, completionHandler: {(data, response, error) in
          guard let data = data else { return }
            do
                {
                    //let Result = try JSONDecoder().decode(Page.self, from: data)
                   // let PageResult = try JSONDecoder().decode(Page.self, from: data)
                    let json = try JSONDecoder().decode(Page.self, from: data)
                    let Results = json.Results;


                  print(Results)

1 个答案:

答案 0 :(得分:0)

首先,强烈建议遵守Swift命名约定,即变量名以小写字母开头,结构以大写字母开头

public struct Page: Decodable {

    private enum CodingKeys : String, CodingKey {
        case count = "Count", message = "Message", searchCriteria = "SearchCriteria", cars = "Results"
    }

    let count: Int
    let message: String
    let searchCriteria: String
    let cars: [Car]
}


public struct Car: Decodable {

    private enum CodingKeys : String, CodingKey {
        case modelYear = "ModelYear", make = "Make", model = "Model", VIN
    }

    let modelYear: String
    let make: String
    let model: String
    let VIN: String
}

cars数组位于变量result中。此代码打印所有值

let result = try JSONDecoder().decode(Page.self, from: data)
for car in result.cars {
     print("Make: \(car.make), model: \(car.model), year: \(car.modelYear), VIN: \(car.VIN)")
}