使用 Swift 的序列化器 JSON 出错 - AutoreleasingUnsafePointer(有 1 个孩子)

Posted

技术标签:

【中文标题】使用 Swift 的序列化器 JSON 出错 - AutoreleasingUnsafePointer(有 1 个孩子)【英文标题】:Error on serializer JSON using Swift - AutoreleasingUnsafePointer (has 1 child) 【发布时间】:2014-08-24 21:15:12 【问题描述】:

我尝试在线解析 JSON,但无法阅读一般类型如何,如何:

   typealias JSON = AnyObject
    typealias JSONDictionary = Dictionary<String, JSON>
    typealias JSONArray = Array<JSON>

永远不要返回这种类型,我读到的 JSON 是:

json:

[

"id":72,
"name":"Batata Cremosa",
"time":"1:30 horas",
"rcp_img_file_name":"batata-cremosa.jpg"
,

"id":183,
"name":"Caldeirada de Peixes",
"time":"50 minutos",
"rcp_img_file_name":"caldeirada-peixes.jpg"
,

"id":76,
"name":"Batata com Cebola e Ervas",
"time":"10 minutos",
"rcp_img_file_name":"batata-cebola-ervas.jpg"
,

"id":56,
"name":"Arroz de forma",
"time":"25 minutos",
"rcp_img_file_name":"arroz-forma.jpg"
]

json 是如何在控制台中读取并转换为字符串的:

在控制台中(var jsonString):

  (
            
            id = 72;
            name = "Batata Cremosa";
            "rcp_img_file_name" = "batata-cremosa.jpg";
            time = "1:30 horas";
        ,
            
            id = 183;
            name = "Caldeirada de Peixes";
            "rcp_img_file_name" = "caldeirada-peixes.jpg";
            time = "50 minutos";
        ,
            
            id = 76;
            name = "Batata com Cebola e Ervas";
            "rcp_img_file_name" = "batata-cebola-ervas.jpg";
            time = "10 minutos";
        ,
            
            id = 463;
            name = "Pat\U00ea de Frango F\U00e1cil";
            "rcp_img_file_name" = "pate-frango-facil.jpg";
            time = "30 minutos";
        ,
...

所以,这是不读取 JSON 的函数,通过调试时必须围绕 Objects dont enter in any 选项进行选择:

解析函数:

func JSONParseArray(jsonString: String) 
        println(jsonString)

        var data: NSData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)

        var error: AutoreleasingUnsafePointer<NSError?> = nil


        let jsonObj: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0),
                error: error)
        println("Error: \(error)")

        if jsonObj is JSONDictionary 
            println("0")

        
        else if  jsonObj is JSONArray 
            println("1")

        

    

不要返回数组或字典,在调试中会出现在 json 下面:

错误返回:

Error: VSs26AutoreleasingUnsafePointer (has 1 child)

当我调试 jsonObj 这个返回 nil

请有人帮忙,我按信息按小时搜索,测试了很多东西,但没有人适合我,非常感谢。

【问题讨论】:

【参考方案1】:

这比你想象的要容易:

var error: NSError?
let jsonObj: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0),
            error: &error)

另外还有一个问题,为什么 JSON 是作为字符串而不是数据传入的。

jsonObj 是一个坏名字,因为一旦它被反序列化,它将成为一个数组,而不是 JSON。

【讨论】:

非常感谢,但最好使用 AFNetworking,响应已准备就绪,但非常感谢您修复我的错误 =D。

以上是关于使用 Swift 的序列化器 JSON 出错 - AutoreleasingUnsafePointer(有 1 个孩子)的主要内容,如果未能解决你的问题,请参考以下文章

使用 DataContractSerializer 发送反序列化的 Json.net 对象时出错

使用 Swift 2 合并 JSON 数据时出错

在 swift 4 中使用可编码的 JSON 时出错?

使用 swift2 解析 json 并使用 NSJSONReadingOptions 出错

Flutter - 带有 Dart 的通用 json 序列化器

将 JSON 转换为 Dictionary Swift 时出错