Swift ::遍历一个json字符串

时间:2015-07-31 15:13:15

标签: json string swift

这是一个看起来像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)

但现在我想访问此字符串的单个元素,例如 - 我想访问第二个“情绪”键,其值为“悲伤”。 我该如何访问它?

3 个答案:

答案 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)
        }
    }
}