【问题标题】:Swift json parsing error: Could not cast value of type NSCFConstantString to NSArraySwift json 解析错误:无法将 NSCFConstantString 类型的值转换为 NSArray
【发布时间】:2015-04-23 10:59:47
【问题描述】:

我在使用 swift 代码解析 json 时遇到了一些问题。

json 示例

{"responce": "ok","orders": [{"id":"1"), {"id":"2"}, {"id":"3"} ]}

这段代码运行良好

let dataArray: NSArray = jsonResult["orders"] as! NSArray

但如果我得到{"responce": "ok","orders": ""} 我得到error: Could not cast value of type __NSCFConstantString (0x10c7bfc78) to NSArray (0x10c7c0470).

我能否以某种方式检查值是否为数组以不崩溃?

【问题讨论】:

  • 你在使用 SwiftyJSON 吗?
  • 我认为是的,如果 NSJSONSerialization 是 SwiftyJSON 的一部分

标签: json swift parsing


【解决方案1】:

是的,您可以通过以下方式检查该值是否为 NSArray:

if let dataArray = jsonResult["orders"] as? NSArray {

}

如果jsonResult["orders"] 的结果是一个 NSArray,那么 dataArray 将被设置,你将进入 if 语句。

【讨论】:

  • 我怀疑您可以通过将其更改为if let dataArray = jsonResult["orders"] as? Array<String> 将其直接转换为Swift Array(前提是它只会存储Strings 否则Array<AnyObject>)
  • +1,但我认为您的意思是 if let orders = jsonResult["orders"] as? [[String: String]] { ... } 或类似的东西。这是一个字典数组,而不是字符串数组。
【解决方案2】:

此错误很可能是由于您从我假设的服务器返回的响应不是 JSON,而是类似于 HTML/XML 响应,表示无法访问服务器,或者您的查询/post 请求无效(因此该值是“NSCFConstantString”)。

使用 James 的答案是检查该值是否为数组的一种非常好的方法,但您可能希望使用 Postman 之类的程序测试您的请求,以查看他的响应是什么,然后硬编码一种方法来处理它用户端的错误。

【讨论】:

  • 你是对的,他应该确保响应是否是有效的 JSON,但是当一个人进行 JSON 解析时会这样做,而不是在这里,他从 a 中获取 "orders" 值之前解析的 JSON 对象。
猜你喜欢
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多