[英]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.