簡體   English   中英

從 SWIFT 中的 url 進行 JSON 解碼

[英]JSON decode from url in SWIFT

我正在嘗試從 URL 解碼以下 JSON:

{
"date":"2018-08-17",
"data":[
       {"id":"IDD","rate":"1.1","name":"My test ID"},
       {"id":"IDX","rate":"101.12","name":"Another test ID"}
       ]
}

我的 swift 文件看起來像:

struct Container: Codable {
let date: String
let data: [MyData]
}

struct MyData: Codable {
let id: String
let rate: Double
let name: String
}

// This outputs the required json string    
if let url = URL(string: "https://www.xxx.php") {

do {
    let contents = try Data(contentsOf: url)

    do {
        let decoder = JSONDecoder()
        let jData: Container = try decoder.decode(Container.self, from: contents)

        print("The data presented is from \(jData.date)")

        for id in jData.data {
            // Here I want to get an array of the json data
            print(id.id)
        }

    } catch {
        print(error.localizedDescription)
    }

} catch {
    print(error.localizedDescription)
}

}

我的代碼拋出錯誤:無法讀取數據,因為它的格式不正確。

我究竟做錯了什么? 您是否也有關於如何改進我的代碼的建議?

謝謝你的幫助!

問題是這一行:

let rate: Double

將其更改為:

let rate: String

我相信問題在於 rate 在您的 data class 中是 Double ,但在您的 JSON rate 中是一個字符串。 將數據類中的速率更改為:

let rate: String

或者更改您的 JSON 以在比率中使用數字而不是字符串:

{
"date":"2018-08-17",
"data":[
       {"id":"IDD","rate":1.1,"name":"My test ID"},
       {"id":"IDX","rate":101.12,"name":"Another test ID"}
       ]
}

編輯:對不起,我剛剛注意到已經有一個基本上說同樣的話的答案。 :)

您應該使用 URLSessionTask 異步下載數據。 否則應用程序將無響應和滯后。

其次,您應該將 rate 更改為 String 或在自定義 init 方法中提供自定義解碼器以將其轉換為 double

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM