【问题标题】:Json Parsing in Swift 2.0 and 3.0Swift 2.0 和 3.0 中的 Json 解析
【发布时间】:2018-02-08 08:29:16
【问题描述】:

我们在解析 JSON 时遇到了 swift 问题。如果您查看示例图像,您将看到我们的问题。我们从 json 中获取字符串。当我们分配给dictionary2时,我们得到异常:

“无法将 '__NSArrayM' (0x10652de00) 类型的值转换为 'NSDictionary' (0x10652e2d8)。”

我们如何解析这个?我们无法将 swift 更新到最新版本。

let urlJsonToken2 = "https://jsonservices.mywebsite.com/api/en/News"
let myURL2 = NSURL(string: urlJsonToken2)
let request2 = NSMutableURLRequest(url: myURL2 as! URL)
request2.httpMethod = "GET"
request2.addValue("Bearer "+token!, forHTTPHeaderField: "Authorization")
request2.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
request2.setValue("application/json", forHTTPHeaderField: "Accept")
let task2 = URLSession.shared.dataTask(with: request2 as URLRequest) {(data2, response2, error2) -> Void in
    if let unwrappedData2 = data2 {
        do {
            let requestReply = NSString(data: data2!, encoding: String.Encoding.ascii.rawValue)
            let tokenDictionary2:NSDictionary = try JSONSerialization.jsonObject(with: unwrappedData2, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
            let Name = tokenDictionary2["Name"] as? String
        }
        catch {}
    }
}
task2.resume()

【问题讨论】:

  • 用图片显示一小段代码有什么意义?每个人都应该给你一个 F。
  • 不要发布代码图片。错误告诉你你做错了什么。您正在将数组转换为字典。
  • 我们也添加了我们的代码。 @Scriptable,我们如何解析数组?你能发布一个示例代码吗?

标签: json swift parsing


【解决方案1】:

错误告诉您您正在尝试将数组解析为字典。

let task2 = URLSession.shared.dataTask(with: request2 as URLRequest) {(data2, response2, error2) -> Void in
    if let unwrappedData2 = data2 {
        do {
            guard let records = try? JSONSerialization.jsonObject(with: unwrappedData2, options: .mutableContainers) as? [[String: Any]] else {
                print("[DEBUG] - Unable to parse JSON as array")
                return
            }

            let firstRecord = records.first
            print(records.count, firstRecord)

        } catch {}
    }
}

注意: 使用 Swift 时,除非确实必须,否则应避免使用 NS 类。 Swift 有它自己的桥接类型。 NSDictionary = 字典,NSArray = 数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多