2017-08-10 42 views
0

我怎樣才能將Any類型的數據從JSONSerialization轉換爲字典數組?我的代碼是:'任何'不可轉換爲'[[String:Any]]'

let jsonArray: [[AnyHashable: Any]] 

    do { 

     jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: [.ReadingOptions.allowFragments]) as! [[AnyHashable : Any]] 
    } 
    catch { 
     let description = NSLocalizedString("Could not analyze earthquake data", comment: "Failed to unpack JSON") 
     print(description) 
     return 
    } 

但是編譯器給我的錯誤信息:

'任何' 是無法轉換爲 '[[AnyHashable:任何]'

附:

我需要解析字典的數組,因此JSON文件看起來像這樣:

[{ 
    "username": "admin", 
    "password": "123" 
}, { 
    "username": "bbvb", 
    "password": "3333" 
}, { 
    "username": "asd", 
    "password": "222" 
}] 
+0

不要使用武力鑄造,因爲JSON數據可能會損壞或不正確,使用可選的澆鑄用''作爲運營商?另外,根據JSON規範,JSON鍵必須是'String's,所以沒有理由使用'AnyHashable'作爲你的字典鍵。但是,如果沒有看到實際的'JSON'響應,我們無法提供確切的幫助,很可能您沒有收到預期的JSON格式。 –

+0

@DávidPásztor我用JSOn例子更新了帖子。將'AnyHashable'改爲'String'並沒有解決任何問題。如果數據被破壞,'do catch'將會捕獲它,所以不需要使用可選項。 – Shmidt

+1

這是不正確的。 do-catch塊只捕獲可拋出的錯誤,但強制轉換不能被捕獲。如果數據無法解碼爲JSON,則do-catch塊只會捕獲錯誤,但它是JSON並不意味着它的格式也正確。 –

回答

1

爲什麼您使用AnyHashable

試試這個:

let jsonArray: Any? = nil 

    do { 



jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [Any] 

     if jsonArray != nil { 
      if let resp = jsonArray as? [[AnyHashable : Any]]{ 

     //your result should be here inside resp, which is an array of dictionary of key-val type `AnyHashable : Any`, although you could just use String value for the key, making your format from [[AnyHashable : Any]] to [[String : Any]] 
     } 

    } 
    catch { 
      let description = NSLocalizedString("Could not analyze earthquake data", comment: "Failed to unpack JSON") 
      print(description) 
      return 
    } 
+0

對不起,'AnyHashable'有什麼問題?爲什麼我不能使用它? – Shmidt

+0

您的代碼不起作用。 – Shmidt

+0

如果您的密鑰是嵌套結構類型,您可以使用AnyHashable,但它取決於JSON的結構。 –

相關問題