一、使用自帶的JSONSerialization</big>
蘋果從IOS5.0后推出了SDK自帶的JSON解決方案NSJSONSerialization。而自Swift3起,這個又改名成JSONSerialization。這是一個非常好用的JSON生成和解析工具,效率也比其他第三方開源項目高。
JSONSerialization能將JSON轉換成Foundation對象,也能將Foundation對象轉換成JSON,但轉換成JSON的對象必須具有如下屬性:
1、頂層對象必須是Array或者Dictionary
2、所有的對象必須是String、Number、Array、Dictionary、Null的實例
3、所有Dictionary的key必須是String類型
4、數(shù)字對象不能是非數(shù)值或無窮
注意:盡量使用JSONSerialization.isValidJSONObject先判斷能否轉換成功。
將對象轉成json字符串,再轉回來
func testJSON()
{
//Swift對象
let user:[String: Any] = [
"uname": "張三",
"tel": ["mobile": "138", "home": "010"]
]
if !JSONSerialization.isValidJSONObject(user) {
print("數(shù)據(jù)結構錯誤")
return
}
// 利用自帶的json轉換成data
//如果設置options為JSONSerialization.WritingOptions.prettyPrinted,則打印格式更好閱讀
let data = try? JSONSerialization.data(withJSONObject: user, options: [])
//Data轉換成String打印輸出
let dataString = String(data: data!, encoding: String.Encoding.utf8)
//輸出json字符串
print("Json Str:\(dataString ?? "")");
//把Data對象轉換回JSON對象
let json = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as? [String:Any]
print("Json Object:", json ?? [:])
let uname = json?["uname"]
let mobile = (json?["tel"] as! [String: Any])["mobile"]
print("get Json Object:","uname: \(uname ?? ""), mobile: \(mobile ?? "")")
}
輸出結果如下:
Json Str:{"uname":"張三","tel":{"home":"010","mobile":"138"}}
Json Object: ["uname": 張三, "tel": {
home = 010;
mobile = 138;
}]
get Json Object: uname: 張三, mobile: 138
解析json字符串
(由于是字符串內容是json數(shù)組,則轉成NSArray。如果字符串是json對象,則轉成NSDictionary。)
func JSONString()
{
let string = "[{\"ID\":1,\"Name\":\"元臺禪寺\",\"LineID\":1},{\"ID\":2,\"Name\":\"田塢里山塘\",\"LineID\":1},{\"ID\":3,\"Name\":\"滴水石\",\"LineID\":1}]"
let data = string.data(using: String.Encoding.utf8)
let jsonArr = try! JSONSerialization.jsonObject(with: data!,
options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String: Any]]
print("記錄數(shù):\(jsonArr.count)")
for json in jsonArr {
print("ID:", json["ID"]!, " Name:", json["Name"]!)
}
}
輸出結果:
記錄數(shù):3
ID: 1 Name: 元臺禪寺
ID: 2 Name: 田塢里山塘
ID: 3 Name: 滴水石
原文出自:www.hangge.com 轉載請保留原文鏈接:https://www.hangge.com/blog/cache/detail_647.html