【问题标题】:Cannot access JSON dictionary results无法访问 JSON 字典结果
【发布时间】:2017-06-01 10:56:30
【问题描述】:

我没有发现这里有什么问题,我正在通过 Alamofire 检索 JSON:

let JSON = response.result.value as! [String : Any]
print("JSON: \(JSON)")
let statusCode = response.response?.statusCode ?? 999

正在控制台中打印:

JSON: ["message": <null>, "value": <__NSArray0 0x174011b30>(

)
, "error": 0]

因此 JSON 设置正确。 然后,我在 statusCode 分配上的 print(然后是相同的范围)之后立即设置了一个断点,但是当我在控制台 po JSON 中输入时,我收到以下错误:

(lldb) po JSON 错误::3:1:错误:使用未解析的标识符“JSON”

因此之后的所有行都失败了:

let resultCode = JSON["error"] as! Int
let resultMessage = JSON["message"] as! String
let resultValue = JSON["value"] as! [AnyObject]

有人能弄清楚为什么会这样吗?这是带有 Xcode 8.3.2 的 Swift 3.1

json 是:

{
  "error": false,
  "message": null,
  "value": [
    {
      "id": 0,
      "deviceId": "E5E3ED6B-8645-4894-8939-DC6AC7B4C37E"
    }
  ]
}

【问题讨论】:

  • 也添加你的 json 格式。
  • 第一次打印:print(response.result.value ?? "No Value is coming from JSON") 首先,如果你从 json 获取值,那么请把你的 JSON 值放在这里。
  • 控制台日志告诉你"message": &lt;null&gt;,所以你的代码在let resultMessage = JSON["message"] as! String崩溃,因为值是空而不是字符串。
  • 这不是重点,我试图在 print 能够打印之后立即 po 整个 JSON,但我收到了错误
  • @FabrizioProsperi 添加更多代码,看起来你在使用 JSON 的地方不在你初始化它的地方

标签: ios json swift3


【解决方案1】:

两个一般性问题:

  • error 的值是 Bool 而不是 Int
  • message 的值为NSNull,如果error 为真,则很可能是String

我建议检查error 值:

if let JSON = response.result.value as? [String : Any] {
    if let error = JSON["error"] as? Bool, error == true {
       print(JSON["message"])
    } else {
       if let resultArray = JSON["value"] as? [[String:Any]] {
          for result in resultArray {
              print("deviceId: ", result["deviceId"] as? String ?? "n/a")
          }
       }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多