这是一个看起来像json的字符串。
let text2 = " [{ \"insertion_date\" :\""+"2015-07-31 11:21:04 +0000"+"\",\"mood\": \""+"Happy"+"\",\"temperature\": \""+"22"+"\"},{ \"insertion_date\" :\""+"2015-07-31 11:21:04 +0000"+"\",\"mood\": \""+"Sad"+"\",\"temperature\": \""+"22"+"\"}]"
我可以像这样访问整个字符串。
var data = text2.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: false)
var localError: NSError?
var json3: AnyObject! = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &localError)
println(json3)
但现在我想访问此字符串的单个元素,例如 - 我想访问第二个“情绪”键,其值为“悲伤”。 我该如何访问它?
答案 0 :(得分:1)
您可以使用以下内容:
var jsonArr: NSArray! = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &localError) as! NSArray
for dict in jsonArr {
print(dict.objectForKey("mood"))
}
将打印每种情绪。
答案 1 :(得分:0)
由于所有可选的解包,Swift的原生JSON解析很痛苦:
if let days = json3 as? NSArray {
if let secondDay = days[1] as? NSDictionary {
let mood = secondDay["mood"] as! String
print(mood)
}
}
您可以使用其他框架(如SwiftyJson)更轻松。
答案 2 :(得分:0)
您也可以使用Swift的本机类型而不是NSArray和NSDictionary,并将NSJSONSerialization
的结果转换为字典数组([[String:AnyObject]]
):
if let json3 = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &localError) as? [[String:AnyObject]] {
for dict in json3 {
if let mood = dict["mood"] as? String {
println(mood)
}
}
}
另请注意,您不需要为NSJSONSerialization提供特定选项,在这种情况下您可以传递nil。
如果您完全确定您的值将始终为String类型,您还可以直接转换结果(并在访问值时避免以后强制转换):
if let json3 = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &localError) as? [[String:String]] {
for dict in json3 {
if let mood = dict["mood"] {
println(mood)
}
}
}