在 swift 中解析 Json 中的 Optional 值时意外发现 nil
Unexpectedly found nil while unwrapping an Optional value in Json parsing in swift
代码:
var json:NSString;
json = NSString(format:"{\"und\":[{\"value\":\"2324\"}]")
var data:NSData = json.dataUsingEncoding(NSUTF8StringEncoding)!
var dataDic:NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error:nil) as! NSDictionary
我形成了自己的 json,当我尝试解析它时给出错误 "Unexpectedly found nil while unwrapping an Optional value"。我认为问题的原因是 json 对于 pasing.I不知道怎么解决这个问题?先谢谢了
正如 Martin R 所建议的那样问题出在您的 json
字符串中。所以只需像这样修改它:
"{\"und\":[{\"value\":\"2324\"}]}"
你最后忘了加}
没有 }
它不能被转换为 NSDictionary
这就是为什么它在 运行 时变成 nil
。
let jsonString = "{\"und\":[{\"value\":\"2324\"}]}"
if let jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
var error: NSError?
if let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: &error) as? [String:AnyObject] {
if let dictionaries = jsonDict["und"] as? [AnyObject] {
for dictionary in dictionaries {
if let value = dictionary["value"] as? String {
println(value)
}
}
}
}
}
你不能像你那样声明一个未初始化的变量。替换
var json:NSString
至
var json:NSString!
感叹号声明会在使用它的地方自动展开可选值(所以你不需要写json!
)但是你需要确保它以某种方式初始化。
代码:
var json:NSString;
json = NSString(format:"{\"und\":[{\"value\":\"2324\"}]")
var data:NSData = json.dataUsingEncoding(NSUTF8StringEncoding)!
var dataDic:NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error:nil) as! NSDictionary
我形成了自己的 json,当我尝试解析它时给出错误 "Unexpectedly found nil while unwrapping an Optional value"。我认为问题的原因是 json 对于 pasing.I不知道怎么解决这个问题?先谢谢了
正如 Martin R 所建议的那样问题出在您的 json
字符串中。所以只需像这样修改它:
"{\"und\":[{\"value\":\"2324\"}]}"
你最后忘了加}
没有 }
它不能被转换为 NSDictionary
这就是为什么它在 运行 时变成 nil
。
let jsonString = "{\"und\":[{\"value\":\"2324\"}]}"
if let jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
var error: NSError?
if let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: &error) as? [String:AnyObject] {
if let dictionaries = jsonDict["und"] as? [AnyObject] {
for dictionary in dictionaries {
if let value = dictionary["value"] as? String {
println(value)
}
}
}
}
}
你不能像你那样声明一个未初始化的变量。替换
var json:NSString
至
var json:NSString!
感叹号声明会在使用它的地方自动展开可选值(所以你不需要写json!
)但是你需要确保它以某种方式初始化。