簡體   English   中英

快速從JSON創建數組

[英]create an array from JSON in swift

我正在嘗試將JSON數據轉換為數組,但是我真的不知道該怎么做。

我獲取數據並將其保存為字符串,也可以在顯示屏上顯示它。

struct User_Hosting: Codable {
    let company_name: String
    let website: String
    let street: String
    let housenumber: String
    let zip: String
    let city: String    

    enum CodingKeys: String, CodingKey {
        case company_name = "company_name"
        case website = "website"
        case street = "street"
        case housenumber = "housenumber"
        case zip = "zip"
        case city = "city"
    }
}

還有其他一些代碼:

let url = URL(string: "myURL.com")

        URLSession.shared.dataTask(with: url!, completionHandler: { [weak self] (data, response, error) in
            guard let data = data, error == nil else {
                print(error?.localizedDescription ?? "An error occurred")
                return
            }
            DispatchQueue.main.async {
                self?.dataSource = try! JSONDecoder().decode([User_Hosting].self, from: data)
            }
        }).resume()
    }

您的CodingKeys與屬性名稱匹配,因此您完全可以擺脫enum

struct UserHosting: Codable {
    let companyName: String
    let website: String
    let street: String
    let housenumber: String
    let zip: String
    let city: String    
}

由於JSON中有一些蛇格鍵,因此您可以將JSONDecoder.keyDecodingStrategy更改為convertFromSnakeCase ,如下所示

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

上面的解碼器將把諸如company_name鍵分配給您的結構的companyName屬性。

最后,您可以在do-catch塊中對JSON進行解碼,因此,如果發生錯誤,我們將收到一條有關錯誤原因的消息。

do {
    self.dataSource = try decoder.decode([UserHosting].self, from: data)
} catch {
    print("JSON Decoding Error \(error)")
}

暫無
暫無

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

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