-3

我的回复如下所示:

[
    {
        "Part" : {
            "id" : "418502",
            "uuid" : "21ec7cdb-cd2d-4b12-8a90-775762eb0f26"
        },
        "Category" : {
            "category_name" : "Regulators",
            "category_code" : "RG"
        }
    },
    {
        "Part" : {
             "id" : "418502",
             "uuid" : "21ec7cdb-cd2d-4b12-8a90-775762eb0f26"
        },
        "Category" : {
             "category_name" : "Regulators",
             "category_code" : "RG"
        }
    }
]

所以我需要解析上面的响应来获取Part数组和Category数组。在谷歌搜索后,我发现:

let resultJson = try JSONSerialization.jsonObject(with: data, options: []) as? [String : AnyObject]
print(resultJson!)

但它会引发致命错误:在展开 Optional 值时意外发现 nil。

我是 swift 新手,我不知道如何转换它。我已经在 Android 中完成了这个,所以我可以肯定地说我得到了服务器的响应。我编写了一个用于调用 Web 服务的通用函数,它适用于其他服务,所以我认为这没有问题。

如何解析我的响应以便获取Part数组和Category数组?谢谢你。

4

1 回答 1

2

您的 JSON 结构具有顶级数组,因此您无法将其解析为字典。尝试这样做

let resultJson = try JSONSerialization.jsonObject(with: data, options: []) as? [Any]
dump(resultJson!)

示例代码将是这样的。不要忘记处理展开的东西

let str = "[{\"Part\":{\"id\":\"418502\",\"uuid\":\"21ec7cdb-cd2d-4b12-8a90-775762eb0f26\"},\"Category\":{\"category_name\":\"Regulators\",\"category_code\":\"RG\"}},{\"Part\":{\"id\":\"418502\",\"uuid\":\"21ec7cdb-cd2d-4b12-8a90-775762eb0f26\"},\"Category\":{\"category_name\":\"Regulators\",\"category_code\":\"RG\"}}]"

let data = str.data(using: .utf8)

do{
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [Any]
    let dicInFirstElement = json?[0] as? [String: Any]
    let part = dicInFirstElement?["Part"]
    dump(part)
    //Pass this json into the following function
}catch let error{

}
于 2017-07-05T14:29:17.203 回答