Search code examples
swiftxcodensdataswift3

Different console output data via NSData and Data (Xcode 8 beta 6, Swift 3)


I write a little snippet of usual code but found that my code don't return hex data from server with this line of code:

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

And the output:

currentData= 24419 bytes

I tried to use Leo's comment link:

stackoverflow.com/q/39075043/2303865

I got something hex data without spaces, and validator (http://jsonprettyprint.com) can't recognise it and returns null.


Solution

  • Let's try to sort out the different issues here and summarize the above comments.

    The description method of Data prints only a short summary "NNN bytes", and not a hex dump as NSData did:

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

    You can get a hex dump by bridging to NSData (source):

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

    or by writing an extension method for Data (How to convert Data to hex string in swift).

    But that is actually not the real problem. The JSON validator needs the JSON as a string, not as a hex dump (source):

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

    And to de-serialize the JSON data into an object you would need none of the above and just call

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