什么是Json? 请百度…
本质就是String,是一种有格式的String.
在Swift中,使用NSJSONSerialization对象,进行解析.
1:将对象(字典/数组)转换成Json String
需要注意:并不是所有的对象都能转换成Json,必须满足以下条件:
1,顶层对象必须是NSArray或者NSDictionary
2,所有的对象必须是NSString、NSNumber、NSArray、NSDictionary、NSNull的实例
3,所有NSDictionary的key必须是NSString类型
4,数字对象不能是非数值或无穷
可以使用NSJSONSerialization.isValidJSONObject方法,判断是否可以转换.
//1:定义一个字典
let bean2 = ["str1": "string","str2": 2,"str3": 2.2,"str4": ["ss1": "sss","ss2": 2,"ss3": 2.2]]
//2:将字典转换成NSData类型
//let data = try? NSJSONSerialization.dataWithJSONObject(bean2,options: .PrettyPrinted)//这种方法输出的Json字符创,会自动添加空格,和换行.输出的格式会很漂亮
let data = try? NSJSONSerialization.dataWithJSONObject(bean2,options: [])//输出一个紧凑的Json字符串,没有换行,没有空格.
//3:将NSData转换成String
//let nsString = NSString(data: data!,encoding: NSUTF8StringEncoding)//这是OC中的NSString类型
let string = String(data: data!,encoding: NSUTF8StringEncoding)//一般使用此方法,这是Swift封装过的String类型,性能比NSString好
//输出结果
//{"str2":2,"str3":2.2,"str4":{"ss1":"sss","ss2":2,"ss3":2.2},"str1":"string"}//无格式的输出
//有格式的输出
{
"str2" : 2,"str3" : 2.2,"str4" : {
"ss1" : "sss","ss2" : 2,"ss3" : 2.2
},"str1" : "string"
}
2:将Json转换成对象(字典/数组)
//1:定义Json字符串
let string = "{\"str2\":2,\"str3\":2.2,\"str4\":{\"ss1\":\"sss\",\"ss2\":2,\"ss3\":2.2},\"str1\":\"string\"}"
//2:将String转换成NSData
let nsData = string.dataUsingEncoding(NSUTF8StringEncoding)
//let nsData = nsString?.dataUsingEncoding(NSUTF8StringEncoding)//NSString的转换方式一样
//3:将NSData转换成对象(字典/数组)
let object = try! NSJSONSerialization.JSONObjectWithData(nsData!,options: .MutableContainers)//options参数似乎不影响输出结果.
//let object = try! NSJSONSerialization.JSONObjectWithData(nsData!,options: .MutableContainers) as! NSDictionary//如果是Json对象
//let object = try! NSJSONSerialization.JSONObjectWithData(nsData!,options: .MutableContainers) as! NSArray//如果是Json数组
//使用object,不同的对象,使用方法不一样
print("4:\(object)")
print("5:\(object["str4"]!)")
print("5:\(object["str4"]!!["ss3"])")
3:String和NSString的互转:
let nsString:NSString = NSString(string: "This is a string")
let string:String = String(nsString)
推荐阅读:
http://www.hangge.com/blog/cache/detail_647.html
http://www.hangge.com/blog/cache/detail_968.html
http://www.hangge.com/blog/cache/detail_798.html
源码: https://github.com/angcyo/JsonDemo
至此: 文章就结束了,如有疑问: QQ群 Android:274306954 Swift:399799363 欢迎您的加入.