一督勺、JOSN簡介
JSON本質(zhì)上箱玷,就是一個(gè)"特殊格式"的字符串
XML
- JSON是網(wǎng)絡(luò)上用來傳輸數(shù)據(jù)使用最廣泛的數(shù)據(jù)格式,沒有之一
- JSON出身草根,是Javascript的子集盒卸,專門負(fù)責(zé)描述數(shù)據(jù)格式
- Javascript是做網(wǎng)頁開發(fā)使用的一種"腳本"語言
- Javascript & Java沒有任何關(guān)系吩翻!
參考網(wǎng)站://http://www.w3cschool.cc
二电媳、JSON語法規(guī)則
JSON的語法格式和OC中的快速包裝字典和數(shù)組的語法幾乎一樣蒙揣!
-數(shù)據(jù)以key/value值對(duì)表示
-數(shù)據(jù)由逗號(hào)分隔
-花括號(hào)保存對(duì)象
-方括號(hào)保存數(shù)組
三、JSON值
-數(shù)字(整數(shù)或浮點(diǎn)數(shù))
-字符串(在雙引號(hào)中)OC@"abc"json"abc"
-邏輯值(true或false)
-數(shù)組(在方括號(hào)中)
-對(duì)象(在花括號(hào)中)
- null
四眯杏、序列化&反序列化
-序列化:在向服務(wù)器發(fā)送數(shù)據(jù)之前夜焦,將NSArray / NSDictionary轉(zhuǎn)換成二進(jìn)制的過程
//主要關(guān)注反序列化!
-反序列化:在從服務(wù)器接收到數(shù)據(jù)之后,將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成NSArray / NSDictionary的過程
五岂贩、NSJSONSerialization類負(fù)責(zé)反序列化得工具類!
-專門負(fù)責(zé)在JSON和Foundation對(duì)象直接轉(zhuǎn)換的類
-可以轉(zhuǎn)換成JSON的Foundation對(duì)象需要具備以下條件:
-頂級(jí)節(jié)點(diǎn)是NSArray或者NSDictionary// 100%返回的數(shù)據(jù),根節(jié)點(diǎn)都是NSDictionary!
-所有的對(duì)象是NSString, NSNumber, NSArray, NSDictionary或者NSNull
-所有字典的key是NSString
- NSNumber不是空或者無窮大
json解析補(bǔ)充
- json和plist一樣都可以表示一段數(shù)據(jù)
- 解析區(qū)別
- plist 根據(jù)url 直接[nsarray arrayWithContentOfUrl ]可以直接變成數(shù)組
- json根據(jù)url
url -> NSData
NSData ? -> ?反序列化 - > 數(shù)組,字典
根據(jù)字典的[@“data”];這個(gè)key 取出里面的數(shù)據(jù)
遍歷,字典轉(zhuǎn)模型,定義可變數(shù)組存儲(chǔ)模型, .copy給全局屬性
代碼:
@implementationViewController {
NSArray *_personArr;
}
- (void)viewDidLoad {
[superviewDidLoad];
[selfloadData];
}
- (void)loadData {
// 1.url
NSURL*url = [[NSBundlemainBundle]URLForResource:@"persons.json"withExtension:nil];
// 2.將其轉(zhuǎn)為二進(jìn)制數(shù)據(jù)-> NSData
NSData*data = [NSDatadataWithContentsOfURL:url];
// 3.反序列化->轉(zhuǎn)為我們OC中能夠識(shí)別到的字典和數(shù)組!
NSDictionary*dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableContainerserror:nil];
// 4.寫入一個(gè)文件[隨便一個(gè)文件,方便分析數(shù)據(jù)結(jié)構(gòu)!] ->寫到mac的桌面上!
//方便我們查看文件的數(shù)據(jù)結(jié)構(gòu)!
[dictwriteToFile:@"/Users/HM/Desktop/person.plist"atomically:YES];
// 4.從所有數(shù)據(jù)中根據(jù)data key,取出數(shù)組
NSArray *arr = dict[@"data"];
NSMutableArray*arrM = [NSMutableArrayarray];
[arrenumerateObjectsUsingBlock:^(NSDictionary*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {
HMPerson*p = [[HMPersonalloc]init];
[psetValuesForKeysWithDictionary:obj];
[arrMaddObject:p];
}];
//賦值
_personArr= arrM.copy;
}