Swift-->Json解析(原生NSJSONSerialization)

公孙和怡
2023-12-01

什么是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 欢迎您的加入.

 类似资料: