gpt4 book ai didi

ios - 使用 Swift 将 JSON 字符串转为 NSDictionary

转载 作者:IT王子 更新时间:2023-10-29 05:46:47 26 4
gpt4 key购买 nike

我正在尝试根据保存在服务器中的数据创建字典,我收到了数据但无法将数据转换为 NSDictionary,我相信它保存在 中NSData 对象

let JSONDictionary: Dictionary = NSJSONSerialization.JSONObjectWithData(JSONData!, options: nil, error: &error) as NSDictionary

这行代码给我带来了问题,它抛出一个 BAD_EXEC_INSTRUCTION

我的问题:如何将 JSON 转换为 NSDictionary

最佳答案

您的代码没有进行任何错误处理。但它可能(如果此数据来自 Web 服务,将会)以多种方式失败。

  1. 您必须确保您的数据对象确实存在
  2. 您必须确保数据对象可以转换为 JSON
  3. 您必须确保 JSON 实际上包含字典

您应该使用 Swifts 条件转换及其可选的绑定(bind)功能。
可选绑定(bind) if let JSONData = JSONData 检查 JSONData 不为 nil。如果无法接收到数据,您使用的强制解包 (JSONData!) 可能会崩溃。

可选的绑定(bind) if let json = NSJSONSerialization.JSONObjectWithData 检查数据是否可以转换为 JSON 对象。条件转换 as? NSDictionary 检查 JSON 对象是否实际上是一个字典。您目前不使用这些检查,您将对象转换为 NSDictionary。如果对象不是有效的 json,或者它不是字典,这将崩溃。

我会推荐这样的东西:

var error: NSError?
if let JSONData = JSONData { // Check 1
if let json: AnyObject = NSJSONSerialization.JSONObjectWithData(JSONData, options: nil, error: &error) { // Check 2
if let jsonDictionary = json as? NSDictionary { // Check 3
println("Dictionary received")
}
else {
if let jsonString = NSString(data: JSONData, encoding: NSUTF8StringEncoding) {
println("JSON String: \n\n \(jsonString)")
}
fatalError("JSON does not contain a dictionary \(json)")
}
}
else {
fatalError("Can't parse JSON \(error)")
}
}
else {
fatalError("JSONData is nil")
}

您可以将检查 2 和检查 3 合并为一行并检查 NSJSONSerialization 是否可以直接创建 NSDictionary:

var error: NSError?
if let JSONData = JSONData { // Check 1.
if let JSONDictionary = NSJSONSerialization.JSONObjectWithData(JSONData, options: nil, error: &error) as? NSDictionary { // Check 2. and 3.
println("Dictionary received")
}
else {

if let jsonString = NSString(data: JSONData, encoding: NSUTF8StringEncoding) {
println("JSON: \n\n \(jsonString)")
}
fatalError("Can't parse JSON \(error)")
}
}
else {
fatalError("JSONData is nil")
}

确保在生产代码中用适当的错误处理替换 fatalError

关于ios - 使用 Swift 将 JSON 字符串转为 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29092101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com