【问题标题】:Converting NSData to readable JSON format Swift将 NSData 转换为可读的 JSON 格式 Swift
【发布时间】:2017-02-26 23:07:03
【问题描述】:

我正在从 Google Calendar Free/Busy API 中提取数据。我在对 POST 的响应中获得的 JSON 数据被编码为 NSData,转换为字符串,但我看不到完整的响应。我无法将 NSData 转换为可以看到 Google 的整个响应的格式。

这是来自 Google 的预期响应:

{
 "kind": "calendar#freeBusy",
 "timeMin": "2016-10-17T17:40:00.000Z",
 "timeMax": "2016-10-17T17:45:00.000Z",
 "calendars": {
  "ID_REDACTED@resource.calendar.google.com": {
   "busy": [
    {
     "start": "2016-10-17T17:40:00Z",
     "end": "2016-10-17T17:45:00Z"
    }
   ]
  }
 }
}

但我只能在响应中看到这么多数据:

responseString = {
 "kind": "calendar#freeBusy",
 "timeMin": "2016-10-17T17:40:00.000Z",
 "timeMax": "2016-10-17T17:45:00.000Z"
}

我不知道如何在“日历:”之后公开 JSON 响应的最后一部分

这是我的代码:

func fetchEvents() {
        for (calID,_) in dict {
            let request = NSMutableURLRequest(URL: NSURL(string: "https://www.googleapis.com/calendar/v3/freeBusy?access_token=\(GIDSignIn.sharedInstance().currentUser.authentication.accessToken)")!)
            request.HTTPMethod = "POST"
            request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")

            let jsonObject: [String:AnyObject] = [
                "timeMin" : "2016-10-17T10:40:00-07:00",
                "timeMax" : "2016-10-17T10:45:00-07:00",
                "items" : [
                    "id" : "\(calID)"
                ],

                ]

            do {
                let data1 =  try NSJSONSerialization.dataWithJSONObject(jsonObject, options: NSJSONWritingOptions.PrettyPrinted)
                let convertedString = String(data: data1, encoding: NSUTF8StringEncoding)
                json = convertedString!

            } catch let myJSONError {
                print(myJSONError)
            }

            request.HTTPBody = json.dataUsingEncoding(NSUTF8StringEncoding)
            let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
                guard error == nil && data != nil else {
                    print("error=\(error)")
                    return
                }

                if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {
                    print("statusCode should be 200, but is \(httpStatus.statusCode)")
                    print("response = \(response!)")
                }

                let responseString = String(data: data!, encoding: NSUTF8StringEncoding)
                print("responseString = \(responseString!)")
            }
            task.resume()
        }
    }

我试过 NSJSONSerialization.dataWithJSONdata 没有运气。我认为这是因为 NSData 在这里被转换为字符串:

let responseString = String(data: data!, encoding: NSUTF8StringEncoding)

它不显示完整的 JSON 响应。我觉得需要将数据转换为 [String:AnyObject] 但我不是 100% 确定。

感谢您的帮助!

【问题讨论】:

  • 必须更新我的 jsonObject,因为它缺少括号:让 jsonObject: [String:[AnyObject]] = [ "items" : [[ "id" : "(calID)" ]], " timeMin" : ["2016-10-17T10:40:00-07:00"], "timeMax" : ["2016-10-17T10:45:00-07:00"], ]

标签: ios json swift2 swift3 nsdata


【解决方案1】:

let responseString = String(data: data!, encoding: NSUTF8StringEncoding) 不会对响应应用任何魔法,它只是将服务器发送的字节转换为字符。如果您没有看到您希望看到的内容,那是因为服务器没有发送它。

【讨论】:

  • 你是绝对正确的。我仔细查看了原始请求中发送的 JSON,它缺少 2 个 [ ] 括号。我有这个:
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多