使用Swift可解码的

时间:2018-05-02 09:44:38

标签: json swift parsing dictionary decodable

我收到以下错误:

  

序列化json typeMismatch时遇到错误(Swift.Dictionary,Swift.DecodingError.Context(codingPath:[],debugDescription:“预计会解码Dictionary而不是找到一个数组。”,underlyingError:nil))

代码:

//---------------
struct Currency: Decodable   {
    let symbol: String
    let price: String
}
var myDict: [Currency] = []
//---------------

func testParse(){
    let jsonUrlString = "https://api.binance.com/api/v3/ticker/price"
    guard let url = URL(string: jsonUrlString) else
    { return }

    URLSession.shared.dataTask(with: url) { (data,response,err) in
        guard let data = data else
        {
            print("Error: No data to decode")
            return
        }
        do
        {
            let exchanges = try
                JSONDecoder().decode(Currency.self, from: data)
            let X: [Currency] = [exchanges]
            self.myDict = X
            self.testFunc()
            print("binance: "+self.myDict[0].symbol + ": "+self.myDict[0].price)
        }
        catch let jsonErr
        {
            print("Error serialising json",jsonErr)
        }
    }
    .resume()
}

我的struct布局有问题吗?或者它是我解析的方式?我希望在这里有更好的理解,以备将来参考。因此,如果有人可以链接一个好的Swift 4指南,我将不胜感激。或者,如果你能给我一个很好的答案(而不是用勺子喂我不学的答案)。

1 个答案:

答案 0 :(得分:1)

仔细阅读错误消息并学会理解。它非常清楚。

  

预计解码字典但找到一个数组

换句话说:您想要解码字典(minimum_should_match)但实际上它是一个数组(Currency)。
[Currency]而言,字典是目标结构或类。

请不要将对象命名为Decodable,这实际上是一个数组。

...dict