如何在Swift 4中解码JSON?

时间:2018-01-09 05:08:12

标签: json swift codable

如何使用Swift 4对json进行解码?

$('#firstButton').click(function(){
    $('#surpise').css("visibility",'visible');
});

我使用以下方法尝试过:

{
    "data": {
        "id": 22,
        "packageId": 5,
        "Package": {
            "id": 5,
            "color": "blue"
        }
    },
    "error": false,
    "message": "Successfully Fetched"
}

它给了我以下错误:

  

keyNotFound(LocalNotificationsAlert.Root.CodingKeys.id,   Swift.DecodingError.Context(codingPath:[],debugDescription:“不   与键id(\“id \”)相关联的值。“,underlyingError:nil))

请帮我解决这个问题,谢谢。

2 个答案:

答案 0 :(得分:3)

Root 对象不是包含idpackageIdpackage键的字典,Root对象是带有键的外部字典dataerrormessage

所以你需要3个结构

struct Root: Codable {
    let data : PackageData? // If `error` is true `data` might be missing
    let error : Bool
    let message : String
}

struct PackageData: Codable {

    enum CodingKeys: String, CodingKey {
        case package = "Package"
        case id, packageId
    }

    let package : Package
    let id : Int
    let packageId : Int
}

struct Package : Codable {
    let id : Int
    let color : String
}

答案 1 :(得分:0)

如果您不想自定义解码响应,则需要为整个json响应提供结构。

struct Response: Decodable {
    let data: Root
    let error: Bool
    let message: String
}