通过NSData和Data提供不同的控制台输出数据(Xcode 8 beta 6,Swift 3)

wm.*_*1us 1 xcode nsdata swift swift3

我写了一小段常用代码,但发现我的代码没有从这行代码返回服务器的十六进制数据:

let currentData = try! Data(contentsOf: fullURL!)
print("currentData=", currentData)
Run Code Online (Sandbox Code Playgroud)

并输出:

currentData= 24419 bytes
Run Code Online (Sandbox Code Playgroud)

我试图使用Leo的评论链接:

stackoverflow.com/q/39075043/2303865

我得到一些没有空格的十六进制数据,验证器(http://jsonprettyprint.com)无法识别它并返回null.

Mar*_*n R 5

让我们尝试在这里理清不同的问题并总结上述评论.

该description方法Data只打印一个简短的摘要"NNN字节",而不是一个十六进制转储的NSData那样:

let o = ["foo": "bar"]
let jsonData = try! JSONSerialization.data(withJSONObject: o)

print(jsonData) // 13 bytes
Run Code Online (Sandbox Code Playgroud)

您可以通过桥接NSData(源)获得十六进制转储:

print(jsonData as NSData) // <7b22666f 6f223a22 62617222 7d>
Run Code Online (Sandbox Code Playgroud)

或者编写一个扩展方法Data(如何在swift中将数据转换为十六进制字符串).

但这实际上不是真正的问题.JSON验证器需要JSON作为字符串,而不是十六进制转储(源):

print(String(data: jsonData, encoding: .utf8)!) // {"foo":"bar"}
Run Code Online (Sandbox Code Playgroud)

要将JSON数据反序列化为对象,您不需要上述任何内容,只需调用即可

let obj = try JSONSerialization.jsonObject(with: jsonData)
Run Code Online (Sandbox Code Playgroud)