2016-07-22 87 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