2016-12-20 65 views
1

我从REST API快速收到响应对象(res)。它是类型的。 __NSArrayM。它包含我想要解析的JSON格式字符串。在swift中解析从API返回为JSON的对象

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

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

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

我搜索了很多,但无法弄清楚这个JSON字符串。

附加:无论哪个对象我尝试投射响应对象。我得到错误 -

无法将类型'__NSArrayM'(0x107e86c30)的值转换为'NSData'(0x107e86168)或我投入的任何数据类型。

+0

不要试图在Swift中复制Objective-C习惯。例如,不要使用NSArray/NSDictionary,而要使用Swift集合等。 – Moritz

+0

是的,我知道,但它无法以任何方式工作。 –

+0

'要解析json,该对象需要是NSDictionary类型。在JSON中,根对象需要是数组或字典。不要混淆NSArray/Swift数组/ JSON数组。 :) – Moritz

回答

2

让我们一步一步来做。

你说你有一个对象命名为“资源”,这是__NSArrayM型和包含这件事:

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

这意味着已经转换的JSON的一个对象,即一个NSArray 。

在这个数组,我们没有看到,这件事情你展示我们是一个字典(我们将其命名为“字典”),其值是一个字符串本身代表了另一种JSON对象

让我们使用该密钥获得的价值:

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

现在的“价值”应该是"[ { \"IsAuth\":\"true\" } ]"

这是a表示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) 
    } 
}