簡體   English   中英

使用 nil 值解析 Swift 中的 JSON

[英]Parsing JSON in Swift with nil values

I'm using Swift 5 and Xcode 11. I am attempting to parse the JSON coming back from this website, an API I am designing. http://aarontcraig-001-site1.htempurl.com/api/values

從 API 調用返回的 JSON 是這樣的:

[
    {
        "Businesses": [],
        "Customer": null,
        "ID": 1,
        "Name": "Coffee Shop",
        "CustomerID": null
    },
...
]

它繼續一個數組。 有些條目是 null,有些則不是。 但是,當我解析它時,它們都返回為零。

這是我的代碼:

let url = "http://aarontcraig-001-site1.htempurl.com/api/values"
        guard let finalURL = URL(string: url) else {
            return
        }

        URLSession.shared.dataTask(with: finalURL) { (data, response, error) in
            guard let data = data else {return}

            do {
                let myData = try JSONDecoder().decode([Value].self, from: data)

                print(myData)
            }
            catch {
                print("Error parsing \(error)")
            }

以及我用來捕捉這一切的結構:

struct Value: Codable {
    let businesses : [String]?
    let customer : String?
    let iD : Int?
    let name : String?
    let customerID : String?
}

我得到的只是 nil 值,盡管其中很多顯然不是。 這就是它返回的內容。

[Sunrise.Value(企業:無,客戶:無,ID:無,名稱:無,客戶ID:無),Sunrise.Value(企業:無,客戶:無,ID:無,名稱:無,客戶ID:無) ,Sunrise.Value(企業:無,客戶:無,ID:無,名稱:無,客戶ID:無),Sunrise.Value(企業:無,客戶:無,ID:無,名稱:無,客戶ID:無) ,Sunrise.Value(企業:無,客戶:無,ID:無,名稱:無,客戶ID:無),Sunrise.Value(企業:無,客戶:無,ID:無,名稱:無,客戶ID:無) ]

我究竟做錯了什么? 即使我嘗試僅捕獲每個條目都有值的名稱,它也會將其設置為 nil。 我正在接收數據,因為如果我在數據處設置斷點,我可以在那里看到它。

Map 使用CodingKeys從 JSON 到結構成員的屬性名稱:

struct Value: Codable {
    let businesses: [String]?
    let customer: String?
    let id: Int
    let name: String
    let customerID: String?

    enum CodingKeys: String, CodingKey {
        case businesses = "Businesses"
        case customer = "Customer"
        case id = "ID"
        case name = "Name"
        case customerID = "CustomerID"
    }
}

暫無
暫無

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

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