尝试在 iOS 7 下使用 SwiftyJSON 解析 JSON 数据时出现未知类型

Posted

技术标签:

【中文标题】尝试在 iOS 7 下使用 SwiftyJSON 解析 JSON 数据时出现未知类型【英文标题】:unknown type while trying to parse JSON data With SwiftyJSON under iOS 7 【发布时间】:2015-02-03 17:01:49 【问题描述】:

我使用Alamofire 进行网络连接,使用SwiftyJSON 在我的 ios 应用程序中解析服务器响应。

我在尝试这样做时总是得到unknownprintln(JSON(data!))

这是我的请求代码:

    Alamofire.request(.GET, URLString: "http://httpbin.org/get", parameters: ["foo": "bar"])
        .response  (request, response, data, error) in
            println("request ====  \(request)")
            println("response ==== \(response)")
            println("error ==== \(error)")
            println("json ==== \(JSON(data!))")
            println("data ==== \(data)")
    

这是我的控制台输出:

request ====  <NSMutableURLRequest: 0x15e9a4e0>  URL: http://httpbin.org/get?foo=bar 
response ==== Optional(<NSHTTPURLResponse: 0x15ddc910>  URL: http://httpbin.org/get?foo=bar   status code: 200, headers 
"Access-Control-Allow-Credentials" = true;
"Access-Control-Allow-Origin" = "*";
Connection = "keep-alive";
"Content-Length" = 430;
"Content-Type" = "application/json";
Date = "Wed, 04 Feb 2015 09:12:45 GMT";
Server = nginx;
 )
error ==== nil
json ==== unknown
data ==== Optional(<7b0a2020 22617267 73223a20 7b0a2020 20202266 6f6f223a 20226261 72220a20 207d2c20 0a202022 68656164 65727322 3a207b0a 20202020 22416363 65707422 3a20222a 2f2a222c 200a2020 20202241 63636570 742d456e 636f6469 6e67223a 2022677a 69703b71 3d312e30 2c636f6d 70726573 733b713d 302e3522 2c200a20 20202022 41636365 70742d4c 616e6775 61676522 3a202266 723b713d 312e302c 656e3b71 3d302e39 2c64653b 713d302e 382c7a68 2d48616e 733b713d 302e372c 7a682d48 616e743b 713d302e 362c6a61 3b713d30 2e35222c 200a2020 20202248 6f737422 3a202268 74747062 696e2e6f 7267222c 200a2020 20202255 7365722d 4167656e 74223a20 224f7545 73744d6f 6e43616d 696f6e2f 636f6d2e 50697865 6c734163 6164656d 792e4f75 4573744d 6f6e4361 6d696f6e 2028313b 204f5320 56657273 696f6e20 372e312e 32202842 75696c64 20313144 32353729 29220a20 207d2c20 0a202022 6f726967 696e223a 20223139 372e3134 2e31302e 3234222c 200a2020 2275726c 223a2022 68747470 3a2f2f68 74747062 696e2e6f 72672f67 65743f66 6f6f3d62 6172220a 7d0a>)

我做错了吗?

【问题讨论】:

如果你只是做一个println(data)? 我在控制台上得到了一些编码数据 能否请您发布输出? 你可以试试let json = JSON(data: dataFromNetworking)println(json["headers"]["User-Agent"] ... 【参考方案1】:

正在打印的 unknown 值来自 SwiftyJSON。您似乎使用了不正确的初始化程序。相反,您想尝试以下方法。

var parsingError: NSError?
let json = JSON(data: dataFromServer, error: &error)

println(json)
println(parsingError)

这将在您发送到 SwiftyJSON 的 NSData 上运行 NSJSONSerialization.JSONObjectWithData。如果成功,您将获得一个有效的JSON 对象。如果失败,你仍然会得到 unknown 类型,但 parsingError 会告诉你解析失败的原因。

最后一个提示是,您可以尝试对dataFromServer 进行编码,以便能够正确地对其进行可视化。以下是你可以做到的。

if let dataFromServer = dataFromServer as? NSData 
    if let encodedData = NSString(data: dataFromServer, encoding: NSUTF8StringEncoding) 
        println(encodedData)
    

希望有帮助!

【讨论】:

【参考方案2】:

我认为问题与iOS7下的Alamofire库有关。我最终使用AFNetworking 并使用 SwiftyJSON 解析 Web 服务响应,没有任何奇怪的问题。

【讨论】:

以上是关于尝试在 iOS 7 下使用 SwiftyJSON 解析 JSON 数据时出现未知类型的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中创建 2D SwiftyJSON 数组

使用 SwiftyJSON iOS 解析 JSON 响应

在 iOS 中使用 SwiftyJSON 时无法编译

iOS:使用 HanekeSwift 和 SwiftyJSON

找不到框架 SwiftyJSON

Xcode 7.2 不加载通过 Cocoapods 安装的库中的类