对于后端通信,我的应用程序需要一种方法来创建一个肯定结构化的JSON,这就是我努力的地方。 创建的JSON应该如下所示:
{
"data": {
"color":"yellow",
"size":"big"
}
}
使用所需数据序列化字典似乎没有正确格式化内容的选项,我的最佳结果如下所示:
Optional({
Kategorie = Strassenschaeden;
PLZ = 46282;
Strasse = Erftweg;
Unterkategorie = Schlagloch;
})
我没有为我的问题找到任何有用的网页链接,因为我是Swift及其文档的新手,我现在有点卡住了。 所以我的问题是: 什么是我的JSON数据(字典/数组)的首选数据结构,我如何创建格式良好的JSON? 在此先感谢:)
编辑:这是我用来实现“最佳结果”的有趣部分:
var data: [String: String] = ["Kategorie": "\(Kategorie)", "Unterkategorie": "\(Unterkategorie)", "Strasse": "\(Strasse)","PLZ": "\(PLZ)"]
self.post(data, url: "http://*************") { (succeeded: Bool, msg: String) -> () in
var alert = UIAlertView(title: "Success!", message: msg, delegate: nil, cancelButtonTitle: "Okay.")
func post(params : Dictionary<String, String>, url : String, postCompleted : (succeeded: Bool, msg: String) -> ()) {
var request = NSMutableURLRequest(URL: NSURL(string: url)!)
let JSONData:NSData = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.PrettyPrinted, error: &err)!
var json = NSJSONSerialization.JSONObjectWithData(JSONData, options: nil, error: &err) as? NSDictionary
println(json)
答案 0 :(得分:2)
下面
let JSONData:NSData = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.PrettyPrinted, error: &err)!
var json = NSJSONSerialization.JSONObjectWithData(JSONData, options: nil, error: &err) as? NSDictionary
您正在将params
字典转换为JSON数据 - 然后转换
JSON数据回来做一本字典!你可能想要的是创建一个字符串
来自JSON数据:
let jsonData = NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted, error: &err)!
let json = NSString(data: jsonData, encoding: NSUTF8StringEncoding)!
println(json)
说明:
jsonData
。:NSData
,Swift编译器可以
自动推断类型。.PrettyPrinted
而不是NSJSONWritingOptions.PrettyPrinted
给出,编译器推断枚举类型
自动。!
强制解包,而应使用可选绑定进行检查
为了成功。答案 1 :(得分:0)
只是一个痒,这里没有人建议swiftyJSON在Swift中使用JSON。
尝试一下,你将失去处理JSON的痛苦。 https://github.com/SwiftyJSON/SwiftyJSON
阅读JSON
let jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let jsonObject = JSON(data: jsonData!)
写JSON
let jsonString = jsonObject.rawString()