【问题标题】:Get JSON in Swift在 Swift 中获取 JSON
【发布时间】:2014-07-18 10:00:52
【问题描述】:

这是我获取 JSON 的代码,它适用于我在其他问题中找到的这个 url:http://binaenaleyh.net/dusor/。 但是,当我将它与这个 url 一起使用时:http://www.netcampus.fr/api/schools,它根本不起作用。我有一个错误说:“exc_breakpoint (code=exc_i386_bpt subcode=0x0)”

是我的代码错了,还是 JSON 数据错了?

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    var myData:NSData = getJSON("http://www.netcampus.fr/api/schools")
    println(myData) // show me data
    var myDict:NSDictionary = parseJSON(myData)
    println(myDict)
}

func getJSON(urlToRequest: String) -> NSData{
    return NSData(contentsOfURL: NSURL(string: urlToRequest))
}

func parseJSON(inputData: NSData) -> NSDictionary{
    var error: NSError?
    var boardsDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary // error here
    return boardsDictionary
}
}

【问题讨论】:

  • 花点时间至少获得一点关于 JSON 的知识。只需一点 JSON 知识,就可以看到一个有一个顶级数组,另一个有一个顶级字典。作为一名软件开发人员,需要了解您编写的代码从他人那里获得的代码。

标签: json swift nsjsonserialization


【解决方案1】:

您的 parseJSON 方法在解析第二个 JSON 时崩溃。 NSJSONSerialization 将其内容映射到一个数组,而您正在期待一个字典:

var boardsDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary // error here

【讨论】:

    【解决方案2】:

    正如@reecon 指出的,你的代码应该是这样的

    //JSON Parsing
    func JSONParsingSample() {
    
        var myData:NSData = getJSON("http://www.netcampus.fr/api/schools")
        //println(myData) // show me data
        var myDict:NSArray = parseJSON(myData)
        println(myDict)
    }
    func getJSON(urlToRequest: String) -> NSData{
        return NSData(contentsOfURL: NSURL(string: urlToRequest))
    }
    
    func parseJSON(inputData: NSData) -> NSArray{
        var error: NSError?
        var boardsDictionary: NSArray = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSArray 
        return boardsDictionary
    }
    //end
    

    【讨论】:

      【解决方案3】:
          let urlString = "webAPI"
          var request = URLRequest(url: URL(string: urlString)!)
      
          let session = URLSession.shared
          request.httpMethod = "GET"
          session.dataTask(with: request)
      
          {
              data, response, error in
              if error != nil
              {
                  print(error!.localizedDescription)
                  return
              }
      
              do
              {
      
      
                  let jsonResult: NSDictionary? = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary
                  self.dict = jsonResult as! NSMutableDictionary
                  print("Synchronous\(jsonResult)")
      
                  DispatchQueue.main.async
                      {
      
                      let url = URL(string: ((((self.dict.value(forKey: "sources") as! NSArray).object(at: 5) as! NSDictionary).value(forKey: "urlsToLogos") as? NSDictionary)?.value(forKey: "small") as? String)!)
                      let data = try? Data(contentsOf: url!)
      
      
                  }
      
      
                              }
              catch
              {
                  print"error"
              }
      
              }.resume()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-14
        相关资源
        最近更新 更多