Swift从url解析JSON

时间:2016-02-27 16:57:39

标签: json swift nsurlsession nsjsonserialization

我非常喜欢swift,我正在尝试解析JSON格式的URL。我收到了这个对象,但它被作为一堆数字返回。如何将这些数字解码为实际对象。

let requestURL: NSURL =  NSURL(string: "http://api.themoviedb.org/3/search/movie?api_key=06f4ca4cd5f26636e0ac8eebce5b8773&query=fight+club&callback=testing&_=1456113299076")!

let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()

let task = session.dataTaskWithRequest(urlRequest) {
(data, response, error) -> Void in

let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode

if (statusCode == 200) {

    if (statusCode == 200) {

        do{
            print(data)
            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)



        }catch {
            print("Error with Json: \(error)")

        }

    }

}
}
task.resume()

1 个答案:

答案 0 :(得分:0)

错误消息

时发生错误
  

错误Domain = NSCocoaErrorDomain Code = 3840“看起来像是一个东西   '是'但不在角色0周围。“

这意味着字符串从一开始就是无效的JSON(格式错误)。

<强>解决方案:

由于某些不可理解的原因,JSON字符串包含在testing(...)块中。

您需要从第9个字符(索引8)修剪数据,直到倒数第二个。

do{
    let trimmedData = data!.subdataWithRange(NSRange(location:8, length: data!.length - 9))
    let json = try NSJSONSerialization.JSONObjectWithData(trimmedData, options: .AllowFragments)
    print(json)
  }
  ...

PS:在完成版块中,强烈建议您在获取nil 之前检查错误是否为statusCode