2016-08-27 1 views
1

Je vous écris un petit bout de code habituelle mais a constaté que mon code ne renvoient pas des données hexagonaux du serveur avec cette ligne de code:Différentes données de sortie de la console via NSData et données (Xcode 8 beta 6, Swift 3)

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

Et la sortie:

currentData= 24419 bytes 

J'ai essayé d'utiliser le lien de commentaire de Leo:

stackoverflow.com/q/39075043/2303865

J'ai obtenu quelque chose de données hexadécimales sans espaces, et le validateur (http://jsonprettyprint.com) ne peut pas le reconnaître et renvoie null.

+0

Vous étiez probablement (ab) en train d'utiliser le fait que la méthode de description de NSData renvoie un "hex dump", ce qui n'est plus vrai pour Data. Mais les données sont là. Pourquoi pensez-vous que ce n'est pas le cas et que voulez-vous réellement accomplir? –

+0

@MartinR Je veux juste obtenir des données, puis utiliser JSONSerialization pour l'obtenir au format JSON. –

+0

Et 'JSONSerialization.jsonObject (avec: currentData)' ne fonctionne pas? Quel résultat obtenez-vous et qu'attendez-vous? –

Répondre

5

Essayons de résoudre les différents problèmes ici et résumons les commentaires ci-dessus.

La méthode description de Data imprime uniquement un résumé court "octets NNN", et non un vidage hexadécimal comme NSData a fait:

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

print(jsonData) // 13 bytes 

Vous pouvez obtenir un vidage hexadécimal en comblant à NSData (source) :

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

ou en écrivant une méthode d'extension pour Data (How to convert Data to hex string in swift).

Mais ce n'est en fait pas le vrai problème. Le validateur JSON a besoin JSON comme une chaîne , non comme un vidage hexadécimal (source):

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

Et pour désérialiser les données JSON dans un objet dont vous auriez besoin aucune de ces et juste call

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