亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS開發使用JSON解析網絡數據

2020-07-26 03:28:12
字體:
來源:轉載
供稿:網友

前言:對服務器請求之后,返回給客戶端的數據,一般都是JSON格式或者XML格式(文件下載除外)

本篇隨便先講解JSON解析。

正文:

關于JSON:

JSON是一種輕量級的數據格式,一般用于數據交互JSON的格式很像Objective-C中的字典和數組:{"name":"jack","age":10}

補充:

  標準的JSON格式的注意點:key必須用雙引號。(但是在Java中是單引號)

  JSON-OC的轉換對照表

   

   其中:null--返回OC里的NSNull類型

使用:

  在JSON解析方案有很多種,但是(蘋果原生的)NSJSONSerialization性能最好

  反序列化(JSON --> OC對象),下面示例解析成字典對象

  

  序列化(OC對象 --> JSON),注意字典的值不能傳nil,但是可以傳[NSNull null]

  

  并不是所有的類型都是可以轉為JSON的

  以下是蘋果官方規定:

  

我們再來看個實例:

#import "MainViewController.h" #import "Video.h"  #define kBaseURL @"http://192.168.3.252/~apple"  @interface MainViewController () @property (strong, nonatomic) NSArray *dataList; @property (weak, nonatomic) UITableView *tableView; @end @implementation MainViewController   class="p1">"412158" snippet_file_name="blog_20140630_1_3481337" name="code" class="objc"> #pragma mark 實例化視圖 - (void)loadView {   self.view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];   //1 tableview   CGRect frame = self.view.bounds;   UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height - 44) style:UITableViewStylePlain];   //1)數據源   [tableView setDataSource:self];   //2)代理   [tableView setDelegate:self];   //)設置表格高度   [tableView setRowHeight:80];   [self.view addSubview:tableView];   self.tableView = tableView;      //toolBar   UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, tableView.bounds.size.height, 320, 44)];   [self.view addSubview:toolBar];      //添加toolbar按鈕   UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithTitle:@"load json" style:UIBarButtonItemStyleDone target:self action:@selector(loadJson)];   UIBarButtonItem *item2 = [[UIBarButtonItem alloc]initWithTitle:@"load xml" style:UIBarButtonItemStyleDone target:self action:@selector(loadXML)];   UIBarButtonItem *item3 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];   [toolBar setItems:@[item3, item1, item3, item2, item3]]; }  #pragma mark -uitableview數據源方法 對于uitableview下面這兩個方法是必須實現的。 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {   return self.dataList.count; }  //每填充一行都調用一次這個方法。知道界面上的所有行都填充完畢。, - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {   //使用可充用標示符查詢可重用單元格   static NSString *ID = @"MyCell";   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];      if (cell == nil) {     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];   }   //設置單元格內容   Video *v = self.dataList[indexPath.row];      cell.textLabel.text = v.name;   cell.detailTextLabel.text = v.teacher;   //加載圖片   //1)同步加載網絡圖片,同步方法以為這這些指令在完成之前,后續指令都無法執行。   //注意:在開發網絡應用時,不要使用同步方法加載圖片,否則會嚴重影響用戶體驗 //  NSString *imagePath = [NSString stringWithFormat:@"%@%@", kBaseURL, v.imageURL]; //  NSURL *imageUrl = [NSURL URLWithString:imagePath]; //  NSData *imageData = [NSData dataWithContentsOfURL:imageUrl]; //  UIImage *image = [UIImage imageWithData:imageData]; //   //  //2)異步加載網絡圖片 //  //網絡連接本身就有異步命令 sendAsync //  [cell.imageView setImage:image];   //如果緩存圖像不存在   if (v.cacheImage == nil) {     //使用默認圖像占位,即能夠保證有圖像,又能夠保證有地方。     UIImage *image = [UIImage imageNamed:@"user_default.png"];     [cell.imageView setImage:image]; //使用默認圖像占位     //開啟異步連接,加載圖像,因為加載完成之后,需要刷新對應的表格航     [self loadImageAsyncWithIndexPath:indexPath];   }else   {     [cell.imageView setImage:v.cacheImage];   }      //[self loadImageAsyncWithUrl:imageUrl imageView:cell.imageView];   return cell; }   #pragma mark 異步加載網絡圖片 //由于uitableview是可重用的,為了避免用戶快速頻繁刷新表格,造成數據沖突,不能直接將uiimageview傳入異步方法 //正確的解決方法是:將表格行的indexpath傳入異步方法,加載完成圖像以后,直接刷新指定的行。 - (void)loadImageAsyncWithIndexPath:(NSIndexPath *)indexPath {   Video *v = self.dataList[indexPath.row]; //取出當前要填充的行   NSString *imagePath = [NSString stringWithFormat:@"%@%@", kBaseURL, v.imageURL];   NSURL *imageUrl = [NSURL URLWithString:imagePath];      //NSLog(@"%@ %@", url, imageView);   //1 request   NSURLRequest *request = [NSURLRequest requestWithURL:imageUrl];   //2 connection sendasync異步請求   [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {     //UIImage *image = [UIImage imageWithData:data];     //[imageView setImage:image];     //將網絡數據保存至緩存圖像。     v.cacheImage = [UIImage imageWithData:data];     //刷新表格     [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];   }]; }  #pragma mark 處理json數據 - (void)handlerJSONData:(NSData *)data {   //json文件中的[]表示一個數據。   //反序列化json數據      //第二個參數是解析方式,一般用NSJSONReadingAllowFragments   NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];      NSLog(@"%@", array); //json解析以后是nsarray格式的數據。      //提示:如果開發網絡應用,可以將反序列化出來的對象,保存至沙箱,以便后續開發使用。   NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   NSString *path = [docs[0]stringByAppendingPathComponent:@"json.plist"];   [array writeToFile:path atomically:YES]; //把array里面的數據寫入沙箱中的jspn.plist中。      //給數據列表賦值   NSMutableArray *arrayM = [NSMutableArray array];   for (NSDictionary *dict in array) {     Video *video = [[Video alloc]init];     //給video賦值     [video setValuesForKeysWithDictionary:dict];     [arrayM addObject:video];   }   self.dataList = arrayM;   //刷新表格   [self.tableView reloadData];      NSLog(@"%@", arrayM); //這句話將調用video里面的description和nsarray+log里面的descriptionWithLocale }  #pragma mark 加載json - (void)loadJson {   NSLog(@"load json");   //從web服務器加載數據   NSString *str = @"http://www.baidu.com?format=json"; //這里是亂寫的   //提示:NSData本身具有同步方法,但是在實際開發中,不要使用次方法   //在使用NSData的同步方法時,無法指定超時時間,如果服務器連接不正常,會影響用戶體驗。   //NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];   //簡歷NSURL   NSURL *url = [NSURL URLWithString:str];   //建立NSURLRequest   NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];   //建立NSURLConnect的同步方法加載數據   NSURLResponse *response = nil;   NSError *error = nil;   //同步加載數據   NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];   //錯誤處理   if (data != nil) {     //下面這兩句話本身沒有什么意義,僅用于跟蹤調試。     NSString *result = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];     NSLog(@"%@", result);          //在處理網絡數據的時候,不要將NSData轉換成nsstring。     [self handlerJSONData:data];   }else if (data == nil && error == nil){     NSLog(@"空數據");   }else   {     NSLog(@"%@", error.localizedDescription);   } } #pragma mark 加載xml - (void)loadXML {   NSLog(@"load xml"); } //- (void)viewDidLoad //{ //  [super viewDidLoad]; //}  @end

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久嫩草影院一区二区| 裸体女人亚洲精品一区| 国产精品久久久久久久美男| 欧美国产日韩二区| 日韩毛片中文字幕| 2019最新中文字幕| 久久久视频精品| 成人在线视频福利| 亚洲片国产一区一级在线观看| 精品一区二区三区三区| 亚洲xxxx视频| 中文字幕亚洲在线| 国产精品自拍网| 欧美性受xxxx黑人猛交| 欧美一区二区三区四区在线| 国产免费成人av| 国产精品免费久久久| 亚洲精品视频二区| 久久久久久久久国产精品| 久久精品99国产精品酒店日本| 国产aⅴ夜夜欢一区二区三区| 国产精品偷伦免费视频观看的| 亚洲xxxx3d| 亚洲欧美日韩爽爽影院| 日韩av最新在线观看| 久久影视电视剧免费网站清宫辞电视| 欧美黄网免费在线观看| 91在线中文字幕| 国产91精品久久久| 欧美二区在线播放| 欧美高清电影在线看| 精品国产老师黑色丝袜高跟鞋| 俺也去精品视频在线观看| 国产日韩精品一区二区| 欧美在线观看视频| 久久精品中文字幕电影| 精品中文字幕乱| 亚洲欧美另类人妖| 98精品在线视频| 国产剧情久久久久久| www.xxxx欧美| 欧美日韩在线另类| 亚洲国产精品高清久久久| 久久网福利资源网站| 欧美日韩中文字幕综合视频| 主播福利视频一区| 亚洲天堂av在线免费观看| 美女福利视频一区| 国产精品极品尤物在线观看| 欧美xxxx综合视频| 中文日韩在线观看| 亚洲美女视频网| 久久久人成影片一区二区三区| 日韩美女在线看| 国产免费一区二区三区在线观看| 不用播放器成人网| 国产v综合ⅴ日韩v欧美大片| 欧美日韩中文字幕在线视频| 欧美成人免费小视频| 亚洲一区免费网站| 777午夜精品福利在线观看| 欧美日本在线视频中文字字幕| 久久精品国产欧美亚洲人人爽| 伊人青青综合网站| 91豆花精品一区| 在线视频精品一| 成人av色在线观看| 欧美成人精品一区二区三区| 欧美韩国理论所午夜片917电影| 中文字幕日韩免费视频| 国产亚洲精品91在线| 日韩在线观看你懂的| 亚洲欧美999| 亚洲日本成人网| 国产精品成人一区二区三区吃奶| 日韩精品中文字幕视频在线| 中文字幕日韩在线播放| 另类天堂视频在线观看| 久久人人爽国产| 国产精品白丝jk喷水视频一区| 性欧美xxxx视频在线观看| 亚洲欧美中文在线视频| 亚洲人成啪啪网站| 国产精品视频一区二区三区四| 91久久精品国产91性色| 奇米一区二区三区四区久久| 国产精品久久久av久久久| 亚洲精品国产美女| 精品久久久久久国产91| 欧美激情在线播放| 欧美精品第一页在线播放| 欧美巨乳在线观看| 亚洲一级片在线看| 国产精品欧美亚洲777777| 97久久久免费福利网址| 欧美高清视频免费观看| 91日韩在线播放| 久久久久久久久久国产| 亚洲一区久久久| 亚洲国产精品99久久| 欧美日韩性生活视频| 日韩女优人人人人射在线视频| 国产视频精品久久久| 国产精品亚洲一区二区三区| 国产日韩在线看片| 亚洲国产第一页| 中文字幕亚洲情99在线| 亚洲欧洲日产国码av系列天堂| 日本亚洲欧洲色α| 91九色在线视频| 国产精品视频1区| 亚洲欧美在线x视频| 午夜精品久久久久久久白皮肤| 日韩中文字幕国产精品| 一本色道久久88综合日韩精品| 国产精品久久久久久av下载红粉| 亚洲欧美一区二区三区情侣bbw| 日韩av中文字幕在线免费观看| 欧美高清视频在线播放| 日韩成人性视频| 亚洲全黄一级网站| 91久久国产综合久久91精品网站| 国产女人18毛片水18精品| 亚洲国产精品悠悠久久琪琪| 97精品视频在线| 91sao在线观看国产| 亚洲精品xxxx| 欧美激情第三页| 国产亚洲精品综合一区91| 欧美在线一区二区视频| 在线性视频日韩欧美| 国产+人+亚洲| 国产日韩欧美在线播放| 亚洲精品视频免费在线观看| 亚洲一区二区久久久久久久| 国产精品偷伦视频免费观看国产| 久久99精品视频一区97| 国产精品一区二区三区免费视频| 亚洲第一免费播放区| 一区二区三区四区视频| 日韩视频在线一区| 欧美一区二区三区图| 久久久av一区| 欧美激情亚洲视频| 欧美精品一区二区三区国产精品| 91在线观看欧美日韩| 少妇激情综合网| 97视频在线免费观看| 亚洲片av在线| 日韩精品免费观看| 国内成人精品视频| 欧美激情视频一区二区三区不卡| 欧美乱妇高清无乱码| 国产原创欧美精品| 欧美黑人又粗大| 日韩欧美国产一区二区| 韩国19禁主播vip福利视频| 欧美专区福利在线| 亚洲精品美女久久久| 亚洲最新在线视频| 韩国三级电影久久久久久| 国产日韩欧美另类| 久久久999成人| 国产欧美日韩精品专区|