【问题标题】:Parsing JSON array in swift快速解析 JSON 数组
【发布时间】:2014-11-10 09:12:07
【问题描述】:

我正在尝试解析以下 JSON

[
    {
        "id": "5",
        "name": "Test",
        "team1": "thingy team",
        "team2": "clicky team",
        "category": "4",
        "end_date": "1415217600",
        "cat_name": "new thingy",
        "team1_bets": 1,
        "team2_bets": 1
    }
]

这是我从 Web 服务获取的 JSON,我正在使用以下代码对其进行解析:

let urlAsString = "http://codespikestudios.com/betting_app/bet/get_events/4"
    //let urlAsString = "http://api.topcoder.com/v2/challenges?pageSize=2"
    let url: NSURL  = NSURL(string: urlAsString)!
    let urlSession = NSURLSession.sharedSession()

    let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
        if (error != nil) {
            println(error.localizedDescription)
        }
        var err: NSError?

        var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
        if (err != nil) {
            println("JSON Error \(err!.localizedDescription)")
        }

        println(jsonTime)
    })
    jsonQuery.resume()

我收到以下错误

操作无法完成。 (NSURLErrorDomain 错误 -1005。) 致命错误:在展开可选值时意外发现 nil

我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试在浏览器中打开该网址?它会给你类似的错误吗?
  • 是的,该 URL 正在浏览器上运行
  • 在你的 completionHandler 的第一行设置断点并检查返回的内容(数据)

标签: ios json swift


【解决方案1】:

您的网址返回以下 JSON -

[
    {
        "id": "5",
        "name": "Test",
        "team1": "thingy team",
        "team2": "clicky team",
        "category": "4",
        "end_date": "1415217600",
        "cat_name": "new thingy",
        "team1_bets": 1,
        "team2_bets": 1
    }
]

最外面的方括号表示根对象是一个数组,因此尝试将 JSON 解析的结果转换为 NSDictionary 会导致问题。

你的代码应该是 -

let urlAsString = "http://codespikestudios.com/betting_app/bet/get_events/4"
let url: NSURL  = NSURL(string: urlAsString)!
let urlSession = NSURLSession.sharedSession()

let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
    if (error != nil) {
        println(error.localizedDescription)
    }
    var err: NSError?

    var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSArray?
    if (err != nil) {
        println("JSON Error \(err!.localizedDescription)")
    }

    println(jsonResult!)
})
jsonQuery.resume()

【讨论】:

  • 所以,只能拍摄对象NSDictionary?
  • JSON 可以有一个 NSDictionary 或 NSArray 作为其最外层的容器——您需要根据 Web 服务返回的内容进行编码。
【解决方案2】:

从 CFNetworking 源代码中,我看到 -1005 指的是 kCFURLErrorNetworkConnectionLost = -1005。所以你的连接有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多