在Swift中转换JSON数据

在Swift中转换JSON数据,json,swift,Json,Swift,我从服务器上获取一些JSON数据,并将其解析为字典。现在我想从字典中获取数据并将其转换为不同的类型,但是我得到了一些错误 我试过了 let manager = AFHTTPRequestOperationManager() manager.requestSerializer = AFJSONRequestSerializer() manager.GET( "http://localhost/example/jsonpage", parameters: nil, succe

我从服务器上获取一些JSON数据,并将其解析为字典。现在我想从字典中获取数据并将其转换为不同的类型,但是我得到了一些错误

我试过了

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类型
at
let id…
let persons…
Argh,应该运行它。iOS JSON将NSNumbers用于INT等。My bad.给出了一个错误,说明
致命错误:值未能从Objective-C类型桥接到Swift类型
at
if let nsid=data[“id”]as?NSNumber{
@Oskar我做了上面的更正。现在应该可以了。
let id = data["id"] as? NSNumber as? Int
let persons = data["persons"] as? NSDictionary as? [String: AnyObject]