我要解析像这样的JSON格式:
{
"key_1" : {
"key_2" : "value"
}
}
然后将"value"
分配给变量。
这是我的代码:
var variableShouldBeAssigned: String
if let x = (jsonResult["key_1"]? as? NSDictionary) {
if let y = (x["key_2"]? as? String) {
variableShouldBeAssigned = y
}
}
但是,当我尝试从x["key_2"]?
向下转换为字符串时会发生错误,但从jsonResult["key_1"]?
向NSDictionary转发是不错的。
我可以使用x["key_2"]
替换x["key_2"]?
来解决错误,但我真的不知道为什么它只适用于jsonResult["key_1"]?
。
有人可以告诉我原因吗?
答案 0 :(得分:5)
String不符合NSCopying,但NSString确实如此! 此外,从NSString到String也是瞬间隐含的......
所以我会说尝试这样的事情......将 字符串 更改为 NSString
这是一个示例,假设您将jsonResult作为NSDictionary处理......
func giveDictionary(jsonResult:NSDictionary) -> String?
{
if let x = (jsonResult["key_1"]? as? NSDictionary)
{
if let y = (x["key_2"]? as? NSString)
{
return y
}
}
return nil
}
答案 1 :(得分:3)
您可以在开头使用Swift词典简化所有类型检查:
var variableShouldBeAssigned: String
if let dict = jsonResult as? [String:[String:String]] {
if let key1Dict = dict["key_1"] {
if let value = key1Dict["key_2"] {
variableShouldBeAssigned = value
}
}
}
实际上,您甚至可以将最后两个if语句组合在一起:
var variableShouldBeAssigned: String
if let dict = jsonResult as? [String:[String:String]] {
if let value = dict["key_1"]?["key_2"] {
variableShouldBeAssigned = value
}
}
通常,您应该使用Swift Dictionaries而不是NSDictionary