ios – 带有Swift的NSDictionary的JSON字符串

ios – 带有Swift的NSDictionary的JSON字符串,第1张

概述我试图从服务器中保存的数据创建一个字典,我收到数据,但我不能将数据转换为NSDictionary,我相信它是在一个NSData对象中保存 let JSONDictionary: Dictionary = NSJSONSerialization.JSONObjectWithData(JSONData!, options: nil, error: &error) as NSDictionary 这行代 我试图从服务器中保存的数据创建一个字典,我收到数据,但我不能将数据转换为NSDictionary,我相信它是在一个NSData对象中保存
let JsONDictionary: Dictionary = NSJsONSerialization.JsONObjectWithData(JsONData!,options: nil,error: &error) as NSDictionary

这行代码是给我问题的代码,它会抛出一个BAD_EXEC_INSTRUCTION.

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

解决方法 您的代码不会执行任何错误处理.但它可以(并且如果这些数据来自Web服务,将会以多种方式失败).

>您必须确保您的数据对象确实存在
>您必须确保数据对象可以转换为JsON
>您必须确保JsON实际上包含一个Dictionary

您应该使用Swifts条件转换和它的可选绑定功能.
如果让JsONData = JsONData检查JsONData不是nil,则可选绑定.如果无法接收数据,您使用的强制解包(JsONData!)可能会崩溃.

如果让Json = NSJsONSerialization.JsONObjectWithData检查数据是否可以转换为JsON对象,则可选绑定.条件演员为? NSDictionary检查JsON对象是否实际上是字典.您目前不使用这些检查,将对象强制转换为NSDictionary.如果对象无效Json,或者它不是字典,那么会崩溃.

我会推荐这样的东西:

var error: NSError?if let JsONData = JsONData { // Check 1    if let Json: AnyObject = NSJsONSerialization.JsONObjectWithData(JsONData,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")}

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

var error: NSError?if let JsONData = JsONData { // Check 1.    if let JsONDictionary = NSJsONSerialization.JsONObjectWithData(JsONData,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的NSDictionary的JSON字符串全部内容,希望文章能够帮你解决ios – 带有Swift的NSDictionary的JSON字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1109010.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存