使用 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 对象时出错
使用 swift2 解析 json 并使用 NSJSONReadingOptions 出错