首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用swift Unbox解析字典数组

如何使用swift Unbox解析字典数组
EN

Stack Overflow用户
提问于 2017-06-28 19:48:15
回答 1查看 863关注 0票数 1

我正在使用拆箱(https://github.com/JohnSundell/Unbox.git)在我的项目中的对象映射我有一个问题,我无法解析数据时,它是来自服务的数组。例如,如果数据采用以下形式

代码语言:javascript
复制
[
    {
        "name": "Spotify",
        "id":"101"
    },
    {
        "name": "Netflix",
        "id":"102"
    }
]

从Unboxer得到一个异常,我们可以通过对象映射器映射数组对象吗?请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2017-08-31 19:21:24

Unbox将你的JSON映射到结构或类,因此你必须有一个符合Unboxable协议的结构/类。例如:

代码语言:javascript
复制
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示例提供服务):

代码语言:javascript
复制
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()

对于原始字典或数组,使用Unbox是没有意义的,只需使用JSONSerialization.jsonObject(with:),如下所示:

代码语言:javascript
复制
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()

注意:在现实世界中,你更喜欢捕捉抛出的异常(如果有的话)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44801550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档