在Jift中将JSON转换为NSData,将NSData转换为JSON

Joh*_*ith 24 xcode json nsdata swift

我在将一个JSON元素转换为一个元素时遇到了问题NSData,而一个NSData变量又回到JSON了Swift中.

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

{
    "transactionID" : 12345,
    "encryptedData" : [-67,51,-38,61,-72,102,48]
}
Run Code Online (Sandbox Code Playgroud)

进入一个NSData encryptedData变量但似乎无法做到这一点.我SwiftyJSON用来解析JSON如下:

let list: Array<JSON> = json["encryptedData"].arrayValue!
Run Code Online (Sandbox Code Playgroud)

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

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

let jsonObject = [
    "transactionID" : 12345,
    "encryptedData" : encryptedData
]
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Cip*_*rau 23

这是在swift 2.0中转换JSON和NSData的代码(改编自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;
}
Run Code Online (Sandbox Code Playgroud)

  • @SunilTarge如果您遵循警告,Xcode可以很好地为您转换它,这样您也可以快速了解Swift 2和3之间的差异. (2认同)

Tis*_*ish 18

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

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

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

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


Shu*_*huo 12

我对SwiftyJSON一无所知.我使用以下代码片段在json和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)
}
Run Code Online (Sandbox Code Playgroud)


Fro*_*tix 8

@Sunil Targe这里是Swift3版本.希望这可以帮助.(改编自Ciprian Rarau的答案)

将数据转换为JSON

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

从JSON转换为数据

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


小智 5

对我有用的 Swift 4:

// 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;
}
Run Code Online (Sandbox Code Playgroud)