iOS SWIFT - NSJSONSerialization 后的 JSON 对象为 nil

标签 ios json swift

你好我正在尝试从服务器而不是字典中读取 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/

相关文章:

java - 在列表的序列化中包含具有数组索引的字段

swift - 实现 Razorpay

objective-c - 没有标准键盘的文本字段的自定义键盘

c# - 使用 System.Text.Json 反序列化形状奇怪的数据

ios - 从上一个 Controller 导航回来时的 ViewController

Javascript:代码片段,无法让它工作(设置和读取cookie)

ios - Razorpay 签名和订单 ID 未进入 onPaymentSuccess 的成功方法

ios - 加速 View 的碎片化

ios - 更改 UIPageViewController 的敏感度

iOS - 在大型 NSArray 中搜索很慢