一、什么是JSON
~JSON指的是JaveScript对象表示法(JavaScript Object Notation)
~JSON是轻量级的文本数据交换格式
~JSON独立于语言
~JSON具有自我描述性、更易理解
二、JSON语法
JSON语法是JavaScript语法的子集。
JSON语法规则
JSON语法是JavaScript对象表示法语法的子集。
~数据在名称/值对中
~数据由逗号分割
~花括号保存对象
~方括号保存数组
JSON名称/值对
JSON数据的书写格式是:名称/值对。类似OC中的字典
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"firstName":"John"
和OC中的字典一模一样。
JSON值
JSON值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组、对象(在花括号中)、null。
JSON对象
JSON对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
JSON数组
JSON数组在方括号中书写:
数组可包含多个对象:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
对象”employess“是包含三个对象的数组。将JSON数据转化为OC的对象
/***** 将Json数据转化为OC的对象 *****/
// Json字符串
NSString *jsonStr = @"{ \"name\" : \"ZhangSan\", \"age\":20, \"dog\" : {\"name\":[\"XiaoHei\", \"XiaoQiang\"]} }";
NSData *data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@", dict);
// 打印dog对应的值,而它的值又是一个字典,所以再找name对应的值
NSLog(@"%@", dict[@"dog"][@"name"]);
// 使用方法要一步一步来找,先找出dog键对应的值,然后再找出name键对应的值
NSDictionary *dogDict = [dict objectForKey:@"dog"];
NSArray *array = [dogDict objectForKey:@"name"];
NSLog(@"%@", array);
// 找出第一个名字
NSString *name = [array objectAtIndex:0];
NSLog(@"%@", name);
// 年龄
NSNumber *num = [dict objectForKey:@"age"];
NSLog(@"%@", num);
将OC的对象转化为JSON数据
/***** 将OC的对象转化为Json数据 *****/
// 字典、数组、数值、字符串
NSArray *arr = @[ @123, @"123", @{@"name":@"Lisi", @"age":@30} ];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:nil];
NSString *str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"%@", str);
// 可以输出到你的桌面上看看效果。
[str writeToFile:@"/Users/apple/Desktop/test.json" atomically:YES encoding:NSUTF8StringEncoding error:nil];