Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting JSON to NSData, and NSData to JSON in Swift

I'm having problems converting a JSON element into NSData, and an NSData variable back into JSON in Swift.

Firstly, I'd like to extract the encryptedData element of the following JSON data:

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

into an NSData encryptedData variable but can't seem to be able to do it. I'm using SwiftyJSON to parse the JSON as follows:

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

But this gives me an array of ScalarNumber which I don't know how to store into an NSData object.

Secondly, I'd like to generate JSON back from the same NSData object:

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

But the NSData encryptedData object doesn't get converted into [-67,51,-38,61,-72,102,48], it just seems to nullify the JSON string.

Any ideas?

like image 784
John Smith Avatar asked Nov 10 '14 09:11

John Smith


People also ask

How do I convert a JSON to a string?

Use the JavaScript function JSON. stringify() to convert it into a string. const myJSON = JSON. stringify(obj);

Which JSON method is used for converting data from a server?

The method JSON. stringify(student) takes the object and converts it into a string. The resulting json string is called a JSON-encoded or serialized or stringified or marshalled object.


2 Answers

Here is code to convert between JSON and NSData in swift 2.0 (adapted from Shuo's answer)

// 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; } 
like image 116
Ciprian Rarau Avatar answered Oct 06 '22 15:10

Ciprian Rarau


In SwiftyJSON you can use rawData method to get NSData:

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

To generate JSON as you want you should convert data to array object:

if let encryptedDataArray = JSON(data: encryptedData).arrayObject {     let jsonObject:JSON = [         "transactionID" : 12345,         "encryptedData" : encryptedDataArray     ]     NSLog(NSString(data: jsonObject.rawData()!, encoding: NSUTF8StringEncoding)!) } 
like image 36
Tish Avatar answered Oct 06 '22 17:10

Tish