- json的自我介紹:JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式。JSON采用完全獨(dú)立于語(yǔ)言的文本格式,這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。在實(shí)際開發(fā)中經(jīng)常使用JSON來獲取服務(wù)器上的數(shù)據(jù),并通過解析json數(shù)據(jù)獲取我們想要的數(shù)據(jù)。
下面是一段通過bejson網(wǎng)頁(yè)校驗(yàn)過的json數(shù)據(jù),該json數(shù)據(jù)結(jié)構(gòu)是最外層是一個(gè)字典,字典里面鍵值“data”又對(duì)應(yīng)著一個(gè)字典。data字典里面再包含一個(gè)“rows”數(shù)組,"rows"數(shù)組里面保存著幾個(gè)字典,如果我們要在下面數(shù)據(jù)中獲取"img"鍵值對(duì)應(yīng)的數(shù)據(jù),我們可以通過下面代碼框中的代碼來獲取。

下圖是json視圖,數(shù)據(jù)還是和上圖中數(shù)據(jù)相同。

在創(chuàng)建好一個(gè)網(wǎng)絡(luò)工具類后,通過urlstr獲取json數(shù)據(jù),并通過json數(shù)據(jù)解析獲取到最外層的字典。
NSDictionary*dcit=[NSJSONSerialization JSONObjectWithData:responseObjectoptions:0error:nil];
這里的dcit字典就是剛才看的JSON數(shù)據(jù)中最外層的字典。我們?cè)俑鶕?jù)鍵值“data”獲取到里面第二層的字典dit。
NSDictionary *dit = dcit[@"data"];
然后通過鍵值“rows”獲取到rows數(shù)組。
NSArray *rows = dit[@"rows"];
通過觀察校驗(yàn)后的json數(shù)據(jù)結(jié)構(gòu),可以看出rows數(shù)組里面又是包含著字典,我們通過遍歷數(shù)組的方法依次取出字典里面的內(nèi)容,通過鍵值“img”就能獲取到圖片的URL
[[NetWorkTool sharedNetWorkTool]GET:urlstr parameters:nil progress:nil success:^(NSURLSessionDataTask *_Nonnulltask,id _NullableresponseObject) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:response Objectoptions:0error:nil];
NSDictionary *dataDict = dict[@"data"];
NSArray *rowsArr = dataDict[@"rows"];
NSArray *bannerArr = dataDict[@"little_banner"];
NSArray *arr =@[rowsArr,bannerArr];
if(successBlock) {
successBlock(arr);
}
}failure:^(NSURLSessionDataTask *_Nullabletask,NSError *_Nonnullerror) {
if(failBlock) {
failBlock(error);
}
}]
介紹第二種雷同的情況
這里的數(shù)據(jù)結(jié)構(gòu)和上面的數(shù)據(jù)結(jié)構(gòu)基本相似,同樣通過下面代碼就能將獲取到我們想要的數(shù)據(jù)。


[[NetWorkTool sharedNetWorkTool]GET:urlstr parameters:nil progress:nil success:^(NSURLSessionDataTask *_Nonnulltask,id _NullableresponseObject) {
NSDictionary *dcit = [NSJSONSerialization JSONObjectWithData:response Objectoptions:0 error:nil];
NSDictionary *dit = dcit[@"data"];
NSArray *rows =dit[@"rows"];
NSMutableArray *tmpArr =[NSMutableArray array];
for(NSDictionary *dict in dictinrows) {
Model *model = [Model modelWithDict:dict];
[tmpArr addObject:model];
}
if(successBlock) {
successBlock(tmpArr.copy);
}
}failure:^(NSURLSessionDataTask *_Nullabletask,NSError *_Nonnullerror) {
if(failBlock) {
failBlock (error);
}
}];
這里附上json數(shù)據(jù)的URL,如果有時(shí)間可以嘗試下進(jìn)行解析數(shù)據(jù)
[json數(shù)據(jù)1](http://api.smzdm.com/v2/util/banner?f=iphone&type=haojia_jingxuan&v=7.1.1&weixin=1
cell數(shù)據(jù)
)
json數(shù)據(jù)2
下面插播一則廣告,如果看了上面的圖片和代碼對(duì)于數(shù)據(jù)結(jié)構(gòu)的解析還不是很理解,建議你看下我之前發(fā)的關(guān)于加載plist文件中數(shù)據(jù)的文章,文章圖文并茂,相信看完后你對(duì)于數(shù)據(jù)結(jié)構(gòu)會(huì)有更深入的理解。--->Plist文件如何加載架構(gòu)復(fù)雜的數(shù)據(jù)
勘誤:上次發(fā)文章時(shí)因?yàn)閷?duì)簡(jiǎn)書的Markdown編輯器不熟悉,所以圖片排版出現(xiàn)錯(cuò)亂?,F(xiàn)在圖片和文本格式已經(jīng)更正了 。