IOS開發(fā)--解析復(fù)雜json數(shù)據(jù)

  • 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ù),我們可以通過下面代碼框中的代碼來獲取。


Paste_Image.png

下圖是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ù)。


12.png

[[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)更正了 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容