1.JSON数据结构和解析
1.1JSON数据结构
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
JSON 值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:名称和值中间使用“:”隔开,类似OC中的字典。
{ "firstName":"John" , "lastName":"Doe" }
JSON 数组在方括号中书写:
数组可包含多个对象:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
1.2JSON解析过程( 使用NSJSONSerialization)
文件:date_JSON.txt
文件内容:
[
{
"sender" : "Sam",
"receiver": "Jack",
"content" : "今晚放学操场见。",
"date" : "2015年10月19日"
},
{
"sender" : "Bob",
"receiver": "Marry",
"content" : "今晚放学操场见。",
"date" : "2015年10月19日"
}
]
//获取文件路径
NSString *filePath=[[NSBundle mainBundle]pathForResource:@"date_JSON" ofType:@"txt"];
//将文件导入data
NSData * data=[NSData dataWithContentsOfFile:filePath];
//使用JSON解析
NSArray * array=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//初始化数组
self.dataArray=[NSMutableArray array ];
//将得到的数据赋值给对象,并放入数组
for (NSDictionary *d in array) {
Message * m=[[Message alloc]init];
[m setValuesForKeysWithDictionary:d];
[self.dataArray addObject:m];
}
//显示解析得到的文档
for (Message *m in self.dataArray) {
NSLog(@"\n");
NSLog(@"sender:%@",m.sender);
NSLog(@"receiver:%@",m.receiver);
NSLog(@"content:%@",m.content);
NSLog(@"date:%@",m.date);
}
注意:
#import "Message.h"
@implementation Message
//未定义的key,防止KVC崩溃
//没有找到的对应的Key,就会执行该方法
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{}
@end
运行结果:
2015-10-19 17:30:29.297 [3182:264087]
2015-10-19 17:30:29.297[3182:264087] sender:Sam
2015-10-19 17:30:29.298[3182:264087] receiver:Jack
2015-10-19 17:30:29.298[3182:264087] content:今晚放学操场见。
2015-10-19 17:30:29.298[3182:264087] date:2015年10月19日
2015-10-19 17:30:29.298[3182:264087]
2015-10-19 17:30:29.298[3182:264087] sender:Bob
2015-10-19 17:30:29.298[3182:264087] receiver:Marry
2015-10-19 17:30:29.298[3182:264087] content:今晚放学操场见。
2015-10-19 17:30:29.298[3182:264087] date:2015年10月19日