在Swift中转换JSON数据
我从服务器上获取一些JSON数据,并将其解析为字典。现在我想从字典中获取数据并将其转换为不同的类型,但是我得到了一些错误 我试过了在Swift中转换JSON数据,json,swift,Json,Swift,我从服务器上获取一些JSON数据,并将其解析为字典。现在我想从字典中获取数据并将其转换为不同的类型,但是我得到了一些错误 我试过了 let manager = AFHTTPRequestOperationManager() manager.requestSerializer = AFJSONRequestSerializer() manager.GET( "http://localhost/example/jsonpage", parameters: nil, succe
let manager = AFHTTPRequestOperationManager()
manager.requestSerializer = AFJSONRequestSerializer()
manager.GET(
"http://localhost/example/jsonpage",
parameters: nil,
success: { (operation: AFHTTPRequestOperation!,
responseObject: AnyObject!) in
if let data = responseObject as? Dictionary<String, AnyObject> {
let id = data["id"] as? Int
let persons = data["persons"] as? Dictionary<String, AnyObject>
}
},
failure: { (operation: AFHTTPRequestOperation!,
error: NSError!) in
println("Error: " + error.localizedDescription)
}
)
let manager=AFHTTPRequestOperationManager()
manager.requestSerializer=AFJSONRequestSerializer()
经理(
"http://localhost/example/jsonpage",
参数:无,
成功:{(操作:AFHTTPRequestOperation!,
响应对象:任意对象!)在
如果让数据=响应对象作为字典{
设id=data[“id”]为?Int
让persons=数据[“persons”]作为字典
}
},
失败:{(操作:AFHTTPRequestOperation!,
错误:n错误!)在中
println(“错误:+错误。本地化描述)
}
)
这给了我一个错误:
let id = data["id"] as? Int
let persons = data["persons"] as? Dictionary<String, AnyObject>
let id=data[“id”]as?Int
将persons=数据[“persons”]设为?字典
错误:
找不到“subscript”的重载,该重载接受提供的参数
您键入的responseObject
作为字典
-表示此字典只能包含作为值的对象;但是Int
不是一个对象,而是一个结构
因此,您只需要使用Any
来重写代码(Any
是表示任何对象或结构的类):
如果让数据=响应对象为?字典{
设id=data[“id”]为?Int
让persons=数据[“persons”]作为字典
}
响应对象的类型为NSDictionary
,支持的JSON值类型为NSDictionary、NSArray、NSString、NSNumber。转换为字典不会将其值转换为正确的类型。您必须单独转换这些值
if let nsid: NSNumber = data["id"] as? NSNumber {
var id = Int(nsid)
}
向NSNumber或NSDictionary分别添加中间转换可解决此错误,并完全实现您想要的转换:
let id = data["id"] as? NSNumber as? Int
let persons = data["persons"] as? NSDictionary as? [String: AnyObject]
你能告诉我们你是如何解析JSON的吗?用更多的代码更新了这个问题。这给了我一个错误,说致命错误:值未能从Objective-C类型过渡到Swift类型atlet id…
和let persons…
Argh,应该运行它。iOS JSON将NSNumbers用于INT等。My bad.给出了一个错误,说明致命错误:值未能从Objective-C类型桥接到Swift类型atif let nsid=data[“id”]as?NSNumber{
@Oskar我做了上面的更正。现在应该可以了。
let id = data["id"] as? NSNumber as? Int
let persons = data["persons"] as? NSDictionary as? [String: AnyObject]