如何在Swift中的NSJSONSerialization.dataWithJSONObject之后获得可读的JSON

Nei*_*ham 11 json ios nsjsonserialization swift

我有一些类似的代码(我在这里简化了):

let text = "abc" let iosVersion = UIDevice.currentDevice().systemVersion

let message = ["Text" : text, "IosVersion" : iosVersion]

            if NSJSONSerialization.isValidJSONObject(message){

                let url = NSURL(string: "http://localhost:3000/api/someapi")

                var request = NSMutableURLRequest(URL: url!)
                var data = NSJSONSerialization.dataWithJSONObject(message, options: nil, error: nil)


                println(data)

                request.addValue("application/json", forHTTPHeaderField: "Content-Type")
                request.HTTPMethod = "POST"
                request.HTTPBody = data

                let task = session.dataTaskWithRequest(request, completionHandler: nil)

                task.resume()
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我希望以可读格式看到JSON,以便我可以将其复制/粘贴到fiddler/curl中,以帮助在服务器端诊断我的API.println(data)上面的行给出了十六进制数据.有任何想法吗?

vad*_*ian 24

从NSData创建一个NSString

do {
  let data = try JSONSerialization.data(withJSONObject: message)
  let dataString = String(data: data, encoding: .utf8)!
  print(dataString)

  // do other stuff on success

} catch {
  print("JSON serialization failed: ", error)
}
Run Code Online (Sandbox Code Playgroud)

我还建议检查JSON序列化的成功与否

do {
  let data = try JSONSerialization.data(withJSONObject: message)
  let dataString = String(data: data, encoding: .utf8)!
  print(dataString)

  // do other stuff on success

} catch {
  print("JSON serialization failed: ", error)
}
Run Code Online (Sandbox Code Playgroud)

编辑:

Swift 2中,错误处理已经改变

do {
  let data = try JSONSerialization.data(withJSONObject: message)
  let dataString = String(data: data, encoding: .utf8)!
  print(dataString)

  // do other stuff on success

} catch {
  print("JSON serialization failed: ", error)
}
Run Code Online (Sandbox Code Playgroud)

Swift 3的更新

do {
  let data = try JSONSerialization.data(withJSONObject: message)
  let dataString = String(data: data, encoding: .utf8)!
  print(dataString)

  // do other stuff on success

} catch {
  print("JSON serialization failed: ", error)
}
Run Code Online (Sandbox Code Playgroud)