使用Decodable使用不同的键值对解码JSON

时间:2017-12-31 14:09:19

标签: json swift

我试图使用具有以下结构的Decodable解析JSON并且我被抛出错误:

  

未向协议“可解码”确认

JSON结构如下:

{
    base = SGD;
    date = "2017-12-29";
    rates =     {
        AUD = "0.95769";
        BGN = "1.2205";
        THB = "24.414";
        TRY = "2.8372";
        USD = "0.74844";
        ZAR = "9.2393";
    };
}

请注意,为了便于阅读,我缩小了JSON对象的大小。

此处的问题是,费率都是不同的键值对,与帖子herehere不同。我的代码到目前为止:

struct Fixer: Decodable {
    let base: String
    let date: String
    let rates: [AnyObject]
}

//at dataTasks
do {
     let results = try JSONDecoder().decode(Fixer.self, from: data)
     print(results.base)
} catch error as NSError {
     print(error?.localizedDescription)
}

如果任何人都可以在具有不同键值对的JSON结构下进行建议,那么应该如何编写结构?

我的参考:video

1 个答案:

答案 0 :(得分:0)

rates的值是字典,而不是数组。

最合理的方法是将对象解码为字典

let rates: [String:String]

或者创建一个结构Rate(例如,使用成员currencyvalue)并编写一个自定义初始值设定项来映射字典(key - > {{1 }和currency - > value)到value的数组

注意:请注意,未指定的RateAnyObject都不能用作目标类型。