Converting JSON to NSData, and NSData to JSON in Swift

John Smith picture John Smith · Nov 10, 2014 · Viewed 63k times · Source

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?

Answer

Ciprian Rarau picture Ciprian Rarau · Sep 15, 2015

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;
}