在swift中将数组转换为JSONstring

如何将数组转换为JSONstring? 基本上我有一个embedded式button的文本框。 当按下button时,文本字段文本被添加到testArray 。 此外,我想将此数组转换为JSONstring。

这是我曾经试过的:

 func addButtonPressed() { if goalsTextField.text == "" { // Do nothing } else { testArray.append(goalsTextField.text) goalsTableView.reloadData() saveDatatoDictionary() } } func saveDatatoDictionary() { data = NSKeyedArchiver.archivedDataWithRootObject(testArray) newData = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(), error: nil) as? NSData string = NSString(data: newData!, encoding: NSUTF8StringEncoding) println(string) } 

我也想用我的savetoDictionart()方法返回JSONstring。

如果你把它转换成数据,然后试图将数据转换为一个对象作为JSON(失败,这不是JSON),并将其转换为string,基本上你有一堆毫无意义的转换。

只要数组只包含JSON可编码值(string,数字,字典,数组,零),你可以使用NSJSONSerialization来做到这一点。

相反,只要做数组 – >数据 – >string部分:

 let array = [ "one", "two" ] let data = NSJSONSerialization.dataWithJSONObject(array, options: nil, error: nil) let string = NSString(data: data!, encoding: NSUTF8StringEncoding) 

虽然你可能不应该使用强制解包,但它给了你正确的起点。

Swift 3

 func notPrettyString(from object: Any) -> String? { if let objectData = try? JSONSerialization.data(withJSONObject: object, options: JSONSerialization.WritingOptions(rawValue: 0)) { let objectString = String(data: objectData, encoding: .utf8) return objectString } return nil } 

Swift 3.0 – 4.0版本

 do { //Convert to Data let jsonData = try JSONSerialization.data(withJSONObject: dictionaryOrArray, options: JSONSerialization.WritingOptions.prettyPrinted) //Convert back to string. Usually only do this for debugging if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) { print(JSONString) } //In production, you usually want to try and cast as the root data structure. Here we are casting as a dictionary. If the root object is an array cast as [Any]. var json = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any] } catch { print(error.description) } 

JSONSerialization.WritingOptions.prettyPrinted选项将它提供给最终使用者,如果它们要在debugging器中打印出来,它将以更易读的格式提供。

参考: Apple文档

JSONSerialization.ReadingOptions.mutableContainers选项允许您修改返回的数组和/或字典。

所有ReadingOptions参考: Apple文档

注意:Swift 4能够使用新协议对对象进行编码和解码。 这里是苹果文档 ,以及一个启动例子的快速教程 。

如果您已经在使用SwiftyJSON:

https://github.com/SwiftyJSON/SwiftyJSON

你可以这样做:

 // this works with dictionaries too let paramsDictionary = [ "title": "foo", "description": "bar" ] let paramsArray = [ "one", "two" ] let paramsJSON = JSON(paramsArray) let paramsString = paramsJSON.rawString(encoding: NSUTF8StringEncoding, options: nil) 

SWIFT 3更新

  let paramsJSON = JSON(paramsArray) let paramsString = paramsJSON.rawString(String.Encoding.utf8, options: JSONSerialization.WritingOptions.prettyPrinted)! 

适用于传输的JSONstring不会经常出现,因为您可以对JSON进行HTTP编码。 但JSON stringify的一个潜在的用例是Multipart Post,AlamoFire支持。

如何将数组转换为json String swift 2.3

 var yourString : String = "" do { if let postData : NSData = try NSJSONSerialization.dataWithJSONObject(yourArray, options: NSJSONWritingOptions.PrettyPrinted) { yourString = NSString(data: postData, encoding: NSUTF8StringEncoding)! as String } } catch { print(error) } 

现在,您可以使用yourSting作为JSONstring..

SWIFT 2.0

 var tempJson : NSString = "" do { let arrJson = try NSJSONSerialization.dataWithJSONObject(arrInvitationList, options: NSJSONWritingOptions.PrettyPrinted) let string = NSString(data: arrJson, encoding: NSUTF8StringEncoding) tempJson = string! as NSString }catch let error as NSError{ print(error.description) } 

注意: –当你想使用tempJsonvariables。

提示:要将包含JSON兼容对象的NSArray转换为包含JSON文档的NSData对象,请使用NSJSONSerialization的相应方法。 JSONObjectWithData是不是。

提示2:你很less需要这些数据作为string。 仅用于debugging目的。