簡體   English   中英

如何使用swift Unbox解析字典數組

[英]How to parse the Array of dictionaries using swift Unbox

我在我的項目中使用取消裝箱( https://github.com/JohnSundell/Unbox.git )進行對象映射我遇到了這個問題,當它從服務中作為數組出來時,我無法解析數據。 例如,如果數據是以下形式

[
    {
        "name": "Spotify",
        "id":"101"
    },
    {
        "name": "Netflix",
        "id":"102"
    }
]

從Unboxer獲取異常,我們可以通過Object mapper映射Array對象嗎? 請幫我...

Unbox將您的JSON映射到結構或類,因此您必須具有符合Unboxable協議的結構/類。 例如:

struct Item: Unboxable {
    var id: String
    var name: String

    init(unboxer: Unboxer) throws {
        self.id = try unboxer.unbox(key: "id")
        self.name = try unboxer.unbox(key: "name")
    }
}

然后你可以像這樣使用它(提供的URL提供你的JSON示例):

let url = URL(string: "https://api.myjson.com/bins/o8b4t")

let task = URLSession.shared.dataTask(with: url!) { data, _, _ in
    if let data = data {
        if let items: [Item] = try? unbox(data: data) {
            print(items.count, items.first?.name)
            // Output: 2 Optional("Spotify")
        }
    }
}

task.resume()

對於原始字典或數組,IMO沒有必要使用Unbox,只需使用JSONSerialization.jsonObject(with:) ,如下所示:

let url = URL(string: "https://api.myjson.com/bins/o8b4t")

let task = URLSession.shared.dataTask(with: url!) { data, _, _ in
    if let data = data {
        if let parsed = (try? JSONSerialization.jsonObject(with: data)) as? [[String: String]] {
            print(parsed.count, parsed.first?["name"])
            // Output: 2 Optional("Spotify")
        }
    }
}

task.resume()

注意:在現實世界中,您更喜歡捕獲拋出的異常(如果有的話)。

暫無
暫無

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

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