- json的自我介紹:JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式榜贴。JSON采用完全獨立于語言的文本格式营密,這些特性使JSON成為理想的數(shù)據(jù)交換語言鼓鲁。易于人閱讀和編寫音同,同時也易于機(jī)器解析和生成请敦。在實際開發(fā)中經(jīng)常使用JSON來獲取服務(wù)器上的數(shù)據(jù)肆饶,并通過解析json數(shù)據(jù)獲取我們想要的數(shù)據(jù)改衩。
下面是一段通過bejson網(wǎng)頁校驗過的json數(shù)據(jù),該json數(shù)據(jù)結(jié)構(gòu)是最外層是一個字典驯镊,字典里面鍵值“data”又對應(yīng)著一個字典葫督。data字典里面再包含一個“rows”數(shù)組,"rows"數(shù)組里面保存著幾個字典,如果我們要在下面數(shù)據(jù)中獲取"img"鍵值對應(yīng)的數(shù)據(jù)竭鞍,我們可以通過下面代碼框中的代碼來獲取。
下圖是json視圖橄镜,數(shù)據(jù)還是和上圖中數(shù)據(jù)相同偎快。
在創(chuàng)建好一個網(wǎng)絡(luò)工具類后,通過urlstr獲取json數(shù)據(jù)洽胶,并通過json數(shù)據(jù)解析獲取到最外層的字典晒夹。
NSDictionary*dcit=[NSJSONSerialization JSONObjectWithData:responseObjectoptions:0error:nil];
這里的dcit字典就是剛才看的JSON數(shù)據(jù)中最外層的字典。我們再根據(jù)鍵值“data”獲取到里面第二層的字典dit姊氓。
NSDictionary *dit = dcit[@"data"];
然后通過鍵值“rows”獲取到rows數(shù)組丐怯。
NSArray *rows = dit[@"rows"];
通過觀察校驗后的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,如果有時間可以嘗試下進(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
下面插播一則廣告舔亭,如果看了上面的圖片和代碼對于數(shù)據(jù)結(jié)構(gòu)的解析還不是很理解,建議你看下我之前發(fā)的關(guān)于加載plist文件中數(shù)據(jù)的文章蟀俊,文章圖文并茂钦铺,相信看完后你對于數(shù)據(jù)結(jié)構(gòu)會有更深入的理解。--->Plist文件如何加載架構(gòu)復(fù)雜的數(shù)據(jù)
勘誤:上次發(fā)文章時因為對簡書的Markdown編輯器不熟悉肢预,所以圖片排版出現(xiàn)錯亂∶矗現(xiàn)在圖片和文本格式已經(jīng)更正了 。