在swift中解析从API返回的JSON对象

时间:2016-12-20 10:54:07

标签: ios json swift api azure

我收到了来自REST API的swift中的响应对象(res)。它是类型。 __NSArrayM。它包含我想要解析的JSON格式字符串。

{ JsonResult = "[ { \"IsAuth\":\"true\" } ]"; }  

这是一个很长的JSON字符串,为简单起见,我将其缩短了。

要解析json,对象需要是Dictionary类型,但我不能将__NSArrayM类型的对象强制转换为它。

我搜索了很多,但无论如何都无法读出这个JSON字符串。

附加:我尝试转换响应对象的对象。我收到了错误 -

无法转换类型' __ NSArrayM' (0x107e86c30)到' NSData' (0x107e86168)或我投入的任何数据类型。

1 个答案:

答案 0 :(得分:2)

让我们一步一步来做。

你说你有一个名为“res”的对象,它的类型为__NSArrayM并且包含这个东西:

{ JsonResult = "[ { \"IsAuth\":\"true\" } ]"; } 

这意味着已经将JSON转换为对象,即NSArray。

在这个我们看不到的数组中,你向我们展示的这个东西是一个字典(我们将其命名为“dict”),其值为 String本身表示另一个JSON对象

让我们使用密钥获取值:

if let value = dict["JsonResult"] as? String {
    print(value)
}

现在“值”应为"[ { \"IsAuth\":\"true\" } ]"

这是一个字符串,代表JSON。要解码JSON,我们首先必须将字符串转换为数据,然后才能解码:

if let data = value.data(using: .utf8) {
    if let content = try? JSONSerialization.jsonObject(with: data, options: []),
        let array = content as? [[String: Any]]
    {
        print(array)
    }
}