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



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

let currentData = try! Data(contentsOf: fullURL!)
print("currentData=", currentData)

输出:

currentData= 24419 bytes

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

stackoverflow.com/q/39075043/22303865

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

让我们尝试在这里整理不同的问题,并总结以上评论。

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

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

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

print(jsonData as NSData) // <7b22666f 6f223a22 62617222 7d>

或者通过编写Data的扩展方法(如何在swift中将数据转换为十六进制字符串(。

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

print(String(data: jsonData, encoding: .utf8)!) // {"foo":"bar"}

并且要将JSON数据反序列化为您需要的对象以上都没有,只需调用

let obj = try JSONSerialization.jsonObject(with: jsonData)

最新更新