2015-07-04 18 views
9

ho qualche codice simile a questo (ho semplificato qui):Come ottenere JSON leggibili dopo NSJSONSerialization.dataWithJSONObject a 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() 

Questo funziona bene, ma mi piacerebbe vedere il JSON in un formato leggibile per poterlo copiare/incollare in fiddler/curl per aiutare a diagnosticare la mia API sul server. La riga println(data) in alto mi dà dati esadecimali. Qualche idea?

risposta

20

creare un NSString da NSData

let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)! 
println(dataString) 

mi piacerebbe inoltre consiglia di verificare il successo della serializzazione JSON

… 
var error : NSError? 
if let data = NSJSONSerialization.dataWithJSONObject(message, options: nil, error: &error) { 
    let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)! 
    print(dataString) 

    // do other stuff on success 

} else { 
    print("JSON serialization failed: \(error)") 
} 

Edit:

In Swift 2 la la gestione degli errori è stata modificata

do { 
    let data = try NSJSONSerialization.dataWithJSONObject(message, options:[]) 
    let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)! 
    print(dataString) 

    // do other stuff on success 

} catch { 
    print("JSON serialization failed: \(error)") 
} 

Aggiornamento per 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) 
} 
+0

che ha funzionato alla perfezione; totale impressionante :) grazie –

+1

... e utilizzare quella stringa per scopi di debug e nient'altro. – gnasher729

+0

In Swift 2, var error: NSError? se let data = NSJSONSerialization.dataWithJSONObject (message, options: nil, error: & error) => è errato con errore: "Errore supplementare agrument 'in chiamata". Come ti aggiusti? – AmyNguyen