失敗了我不后悔,但我一定后悔沒有去嘗試 - 杰夫 貝索斯
JSON是JavaScript Object Notation的縮寫职祷,它是一種輕量級的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互,服務器返回給客戶端的數(shù)據(jù)郑口,一般是JSON格式或者XML格式(文件下載除外)。
然而在app開發(fā)中盾鳞,我們需要將用戶設置的數(shù)據(jù)上傳到后臺犬性。我們根據(jù)后臺提供的接口文檔,有些參數(shù)往往需要將一些字典和數(shù)組需要先轉(zhuǎn)為json格式的然后上傳腾仅,以方便后臺進行處理乒裆!
雖然oc和swift語言中都是使用蘋果提供的NSJSONSerialization類來json序列化,但是swift處理還是與OC有所不同的推励,所以今天分享swift中json序列化鹤耍。
我將以藝學教師版中老師將教學科目設置好之后保存到后臺服務器為例:
-
如下圖我需要將紅框內(nèi)的已選科目上傳到后臺:
subject.png -
后臺提供的接口文檔描述如下:
format.png 下面的代碼是點擊保存之后上傳數(shù)據(jù)到后臺
var arr = [[String: AnyObject]]()
for selModel in selectedList { // var selectedList = [TeachSubjectEntity]() // 已選科目
var dict = [String: AnyObject]()
dict["son_name"] = selModel.cname
for model in dataList {
if selModel.pid == model.ID { // var dataList = [TeachSubjectEntity]() // 所有分類
dict["parent_name"] = model.cname
}
}
arr.append(dict)
}
var params = [String: AnyObject]()
params["token"] = Token
params["id"] = YXAccount.sharedAccount().ID
do {
let list = try NSJSONSerialization.dataWithJSONObject(arr, options: .PrettyPrinted)
let listJson = NSString(data: list, encoding: NSUTF8StringEncoding)
params["list"] = listJson
} catch {
print(error)
}
YXHttpTool.post(AddTeachSubjectURL, params: params, success: { (JSON) in
if let dict = JSON as? [String: NSObject], code = dict["code"], msg = dict["msg"]{
SVProgressHUD.setMinimumDismissTimeInterval(0.8)
if code == "0" {
SVProgressHUD.showSuccessWithStatus("保存成功")
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), {
self.navigationController?.popViewControllerAnimated(true)
})
} else {
SVProgressHUD.showErrorWithStatus(msg as! String)
}
}
}) {
}
其中下面這段代碼就是將數(shù)組轉(zhuǎn)為json格式的, swift2.0之后就必須以拋出一個異常的方式來轉(zhuǎn)json字符串验辞, 下面的思路是先將數(shù)組轉(zhuǎn)為NSData稿黄,再進一步轉(zhuǎn)為JSonString。
do {
let list = try NSJSONSerialization.dataWithJSONObject(arr, options: .PrettyPrinted)
let listJson = NSString(data: list, encoding: NSUTF8StringEncoding)
params["list"] = listJson
} catch {
print(error)
}
持續(xù)更新跌造。抛猖。。