我有一个json对象,我需要序列化到字典中。我知道我可以将它序列化为NSDictionary但是从
开始“在Swift 1.2中,具有原生Swift等价物的Objective-C类(NSString,NSArray,NSDictionary等)不再自动桥接。”
参考:[http://www.raywenderlich.com/95181/whats-new-in-swift-1-2]
我宁愿在原生的swift词典中使用它来避免尴尬的桥接。
我无法使用NSJSONSerialization方法,因为它只映射到NSDictionay。将JSON序列化为快速字典的另一种方法是什么?
答案 0 :(得分:4)
您可以直接使用Swift词典NSJSONSerialization
。
{"id": 42}
的示例:
let str = "{\"id\": 42}"
let data = str.dataUsingEncoding(NSUTF8StringEncoding)
let json = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: nil) as! [String:Int]
println(json["id"]!) // prints 42
或AnyObject
:
let json = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: nil) as! [String:AnyObject]
if let number = json["id"] as? Int {
println(number) // prints 42
}
<强>更新强>
如果您的数据可能为零,则必须使用安全展开以避免错误:
let str = "{\"id\": 42}"
if let data = str.dataUsingEncoding(NSUTF8StringEncoding) {
// With value as Int
if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as? [String:Int] {
if let id = json["id"] {
println(id) // prints 42
}
}
// With value as AnyObject
if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as? [String:AnyObject] {
if let number = json["id"] as? Int {
println(number) // prints 42
}
}
}
Swift 2.0更新
do {
let str = "{\"id\": 42}"
if let data = str.dataUsingEncoding(NSUTF8StringEncoding) {
// With value as Int
if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:Int] {
if let id = json["id"] {
print(id) // prints 42
}
}
// With value as AnyObject
if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject] {
if let number = json["id"] as? Int {
print(number) // prints 42
}
}
}
} catch {
print(error)
}