【问题标题】:Reading Data in API response | iOS在 API 响应中读取数据 | iOS
【发布时间】:2017-03-03 18:50:55
【问题描述】:

我正在尝试在我的 iOS 项目中集成登录 API。当我在浏览器中点击该 API 时,它会给我正确的 JSON 响应。然而,当我在我的应用程序中调用它时,我无法读取 JSON。代码如下:

let url = NSURL(string: "myURL")
let request = NSURLRequest(URL: url!)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in

    if error != nil {
          print (error)
     }
      do {
         //jsonDict is always nil
         if let jsonDict = try self.jsonFromData(data!) {
            print (jsonDict)
         }
       }
       catch {
          print ("hi")
        }    
    }

jsonFromData 为:

private func jsonFromData(jsonData: NSData) throws -> [NSDictionary]?
{
    var jsonDict: [NSDictionary]? = nil
    do
    {
        jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) as? [NSDictionary]
    }
    catch
    {
        throw(error)
    }

    return jsonDict
}

API 的响应,在浏览器中点击时如下:

请帮助我,我做错了什么。谢谢。

更新: 我刚刚检查过,如果我将数据转换为字符串,它会给出正确的值。即

let string = NSString(data: jsonData, encoding: NSASCIIStringEncoding)
print (string)
//OUTPUT: Optional({"Authenticated":true,"CustomerID":000,"CustomerName":"TEMP","Members":[{"MemberID":000,"MemberNumber":"000","MembershipID":00,"MembershipExpiration":"\/Date(1517464799000-0600)\/","ValidBuyerTypes":[0]}]})

【问题讨论】:

    标签: ios json api nsdata


    【解决方案1】:

    看看你解码 JSON 和 as 的代码?陈述。您正在尝试获取 NSDictionary 数组。您打印的 JSON 包含一个字典,而不是一个数组。

    【讨论】:

      【解决方案2】:

      这对我来说是正确的。我唯一能想到的是(尽管字符串输出看起来像)您的响应的顶级容器是 NOT 一个NSDictionary。在你的jsonFromData 函数中,我不会假设JSONObjecWithData 的结果是NSDictionary,而是说:

      let iDunnoWhatThisIs = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) // don't cast this to NSDictionary
      

      看看你得到了什么。它应该是字典或数组,但是,由于您为选项设置了NSJSONReadingOptions.AllowFragments,因此它可能完全是其他东西。从确保您实际上恢复到您假设的状态开始,然后从那里开始。

      【讨论】:

      • 是的,我通过这种方式解决了这个问题。响应是字符串(很可能)。然后我将字符串类型转换为字典。我也会分享我的答案。
      【解决方案3】:

      尝试改用 NSKeyedUnarchiver:

      jsonDict = NSKeyedUnarchiver.unarchiveObjectWithData(jsonData)! as NSDictionary
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-31
        • 2015-10-31
        • 2021-12-03
        • 2016-04-27
        • 2016-08-18
        • 2021-02-27
        • 2020-04-26
        • 1970-01-01
        相关资源
        最近更新 更多