how example consuming json xcode swift nsdata

json - example - rest swift



Convertir JSON a NSData, y NSData a JSON en Swift (6)

Estoy teniendo problemas para convertir un elemento JSON en NSData , y una variable NSData nuevo en JSON en Swift.

En primer lugar, me gustaría extraer el elemento encryptedData de los siguientes datos JSON:

{ "transactionID" : 12345, "encryptedData" : [-67,51,-38,61,-72,102,48] }

en una variable NSData encryptedData pero parece que no puede hacerlo. Estoy usando SwiftyJSON para analizar el JSON siguiente manera:

let list: Array<JSON> = json["encryptedData"].arrayValue!

Pero esto me da una serie de ScalarNumber que no sé cómo almacenar en un objeto NSData .

En segundo lugar, me gustaría generar JSON desde el mismo objeto NSData :

let jsonObject = [ "transactionID" : 12345, "encryptedData" : encryptedData ]

Pero el objeto NSData encryptedData no se convierte a [-67,51, -38,61, -72,102,48], simplemente parece anular la cadena JSON.

¿Algunas ideas?


@Sunil Targe aquí está la versión Swift3. Espero que esto ayude. (Adaptado de la respuesta de Ciprian Rarau)

Convertir datos a JSON

func dataToJSON(data: Data) -> Any? { do { return try JSONSerialization.jsonObject(with: data, options: .mutableContainers) } catch let myJSONError { print(myJSONError) } return nil }

Convertir de JSON a datos

func jsonToData(json: Any) -> Data? { do { return try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted) } catch let myJSONError { print(myJSONError) } return nil; }


Aquí está el código para convertir entre JSON y NSData en swift 2.0 (adaptado de la respuesta de Shuo)

// Convert from NSData to json object func nsdataToJSON(data: NSData) -> AnyObject? { do { return try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) } catch let myJSONError { print(myJSONError) } return nil } // Convert from JSON to nsdata func jsonToNSData(json: AnyObject) -> NSData?{ do { return try NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted) } catch let myJSONError { print(myJSONError) } return nil; }


En SwiftyJSON puedes usar el método rawData para obtener NSData:

if let encryptedData:NSData = json["encryptedData"].rawData() { NSLog(NSString(data: encryptedData, encoding: NSUTF8StringEncoding)!) }

Para generar JSON como desee, debe convertir los datos a un objeto de matriz:

if let encryptedDataArray = JSON(data: encryptedData).arrayObject { let jsonObject:JSON = [ "transactionID" : 12345, "encryptedData" : encryptedDataArray ] NSLog(NSString(data: jsonObject.rawData()!, encoding: NSUTF8StringEncoding)!) }


No tengo ni idea de SwiftyJSON. Uso el siguiente fragmento de código para convertir entre json y nsdata

// Convert from NSData to json object public class func nsdataToJSON(data: NSData) -> AnyObject? { return NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: nil) } // Convert from JSON to nsdata public class func jsonToNSData(json: AnyObject) -> NSData?{ return NSJSONSerialization.dataWithJSONObject(json, options: .allZeros, error: nil) }


Swift 4 que funciona para mí:

// Convert from JSON to nsdata func jsonToNSData(json: AnyObject) -> NSData?{ do { return try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted) as NSData } catch let myJSONError { print(myJSONError) } return nil; }


class ViewController: UIViewController { let requestURL : NSURL = NSURL(string: "http://www.learnswiftonline.com/Samples/subway.json")! let session = URLSession.shared override func viewDidLoad() { super.viewDidLoad() fetchData() } func fetchData() { let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL) let task = session.dataTask(with: urlRequest as URLRequest) { (data, response, error) -> Void in let httpResponse = response as! HTTPURLResponse let statusCode = httpResponse.statusCode if(statusCode == 200) { do { let jsonResponse = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) print(jsonResponse as! NSDictionary) } catch let error { print(error) } } } task.resume() } }