2016-11-10 96 views
1

我有一個數組中Xcode返回其輸出如下:如何從此JSON數組中抽取此特定節點?

["userDetails": { 
    id = 31; 
    "user_email" = "[email protected]"; 
    "user_name" = "Steve Downs"; 
    }, "communities": <__NSArrayI 0x600000245f40>(
    { 
    id = 5; 
    name = South; 
    }, 
    { 
    id = 13; 
    name = HurraHarry; 
    }, 
    { 
    id = 15; 
    name = EnclliffeT; 
    } 
    ) 
    ] 

下面的代碼正確地分配載「社區」到它們各自的變量中的值。

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

if let arr = json?["communities"] as? [[String:String]] { 
         self.communitiesArray = arr.flatMap { $0["name"]!} 
         self.communityIdsArray = arr.flatMap { $0["id"]!} 
         } 

        if let arr = json?["userDetails"] as? [AnyObject] { 

         self.playerId = (arr.flatMap { $0["id"]!} as (AnyObject)) as! [String] 
         print (self.playerId); 
        } 

但是我無法從"userDetails"分配id。如何從"userDetails"獲取id並將其分配給self.playerId?

回答

0

你可以嘗試這樣的事情

if let dict = json?["userDetails"] as? [String:String] { 
    self.playerId = dict["id"] 
} 
+0

謝謝,我得到:「字符串」不能指定類型的值鍵入'[String]' – RDowns

+0

我知道它的工作原理:self.playerId = [dict [「id」]!] – RDowns

-1

好正確的是我相信:

guard let item = json?["userDetails"] as? [String: AnyObject], 
    self.playerId = item["id"] as? Int else { 
    return; 
} 
+0

爲什麼down投票?請 –

+1

這個想法可能是正確的*但是* Lefteris直接使用'self.playerId'屬性代替'guard'中的一個新變量,這是行不通的。 – Moritz

相關問題