2016-07-22 177 views
0

請幫我從響應斯威夫特GET值從字典

{ 
    "BU": { 
    "name": "Bulawayo", 
    "names": "Bulawayo" 
    }, 
    "HA": { 
    "name": "Harare", 
    "names": "Harare" 
    } 
} 

我想關鍵的名稱值獲取值。我的代碼如下

let response = responseObject as! Dictionary<String,AnyObject> 
let stateNames = response.values as! Dictionary<String,AnyObject> 

得到這個問題:

cannot cast from lazyMapCollection<Dictionary<String,Anyobject>,String> in swift 

回答

3

就可以得到「BU」的價值response.valueForKey("BU").valueForKey("name")它會給你的價值「布拉瓦約」。

+0

感謝烏拉圭回合答覆.. @Bhuatik –

+0

@Bhuatik響應是從服務器,所以我不能指定密鑰名稱 –

+0

@ ThripthiHaridas請檢查我的答案。 –

-1

獲得在NSData的格式的響應後,你可以做以下來獲取數據,

if let json = try? NSJSONSerialization.JSONObjectWithData(nsdata, options: .MutableContainers) as! NSDictionary {   
    if let some = json["BU"][0]["name"] { 
     print(some) // prints -- Bulawayo 
    } 
} 

通過使用subscipt我們可以得到的數據。

1

如果你希望所有的名稱,然後嘗試這樣

var name = [String]() 
let keyArray = responseDic.allKeys as! [String] 
for key in keyArray { 
    let nameDic = responseDic.valueForKey(key) as! Dictionary<String,AnyObject> 
    name.append(nameDic.valueForKey("name") as! String) 
} 
+0

這不起作用 –

+0

什麼錯誤,你得到 –

+0

檢查我的編輯也。從lazyMapcollection <<詞典,AnyObject>,字符串> –

0

你可以做以下的訪問值:

if let responseBU = response["BU"] { 
    let name = responseBU["name"] 
    let names = responseBU["names"] 
} 
+0

名稱BU不能使用。值與服務器的不同 –

+0

您的意思是說鑰匙本質上是動態的嗎?你應該用你的服務器發送鍵,而不是「BU」 @ThripthiHaridas – Sreehari

+0

如果你真的不知道鑰匙是什麼,那麼你就可以得到這樣所有的鍵:讓allKeys =陣列(response.keys)。 @ThripthiHaridas – Sreehari