你好我正在尝试从服务器而不是字典中读取 JSON 作为数组。如果我这样做
let json: NSArray?
do {
json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! NSArray
print("json is \(json)")
}
json 对象通过这段代码变为 nil,而且我也无法像这样访问变量 json["code"]
我也试过了
NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as! NSArray
但是如果我不指定任何类型并让变量为 AnyObject
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
print("json is \(json["code"]!)")
}
它有效但是这里的第一个问题是它在调试器中打印 Optional 但与我不能做这样的事情相比它是我最不担心的
if json["code"] == 200 {
}
如果我这样做,它会说
二元运算符“==”不能应用于 Anyobject 类型的操作数?和 Int
我想要的是获取NSArray
中的数据。我不想将 json 变量设置为 AnyObject
。简而言之,我希望这段代码能够工作
let json: NSArray?
do {
json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! NSArray
print("json is \(json)")
}
如果可能的话。我不知道我在这里做错了什么
json:
{"code":200,"msg":"login success"}
最佳答案
如果打印 json["code"]
有效,那么 json
无疑是一个字典。
JSONObjectWithData
返回 AnyObject
即
“我不知道它是什么,但它是某种对象而不是值”(感谢 gnasher729 对 的更准确解释任何对象
)
因为您知道对象是[String:AnyObject]
转换类型
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! [String:AnyObject]
然后获取代码——这是一个Int
——用
if json["code"] as! Int == 200 {
}
或者如果键是可选的,则使用可选绑定(bind)
if let code = json["code"] as? Int {
if code == 200 {
}
}
关于iOS SWIFT - NSJSONSerialization 后的 JSON 对象为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670976/