2016-12-20 69 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) 
    } 
}