在Swift中将JSON转换为NSData以及将NSData转换为JSON

问题描述:

在Swift中将JSON元素转换为NSData并将NSData变量转换回JSON时遇到问题.

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

首先,我想提取以下JSON数据的encryptedData元素:

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

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

放入NSData encryptedData变量,但似乎无法执行.我正在使用SwiftyJSON来解析JSON,如下所示:

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!

但是这给了我一个ScalarNumber数组,我不知道如何将其存储到NSData对象中.

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

其次,我想从同一个NSData对象生成JSON:

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

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

但是NSData encryptedData对象没有被转换为[-67,51,-38,61,-72,102,48],它只是使JSON字符串无效.

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.

有什么想法吗?

在SwiftyJSON中,您可以使用rawData方法获取NSData:

In SwiftyJSON you can use rawData method to get NSData:

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

要根据需要生成JSON,您应该将数据转换为数组对象:

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)!)
}