iOS開發網絡篇—JSON介紹

一、什麼是JSON

JSON是一種輕量級的數據格式,一般用於數據交互

服務器返回給客戶端的數據,一般都是JSON格式或者XML格式(文件下載除外)

 

JSON的格式很像OC中的字典和數組

{"name" : "jack", "age" : 10}

{"names" : ["jack", "rose", "jim"]}

標準JSON格式的注意點:key必須用雙引號

 

要想從JSON中挖掘出具體數據,得對JSON進行解析。即把JSON 轉換爲 OC數據類型

 

二、JSON – OC 轉換對照表

對照關係

 

三、JSON解析方案

1.在iOS中,JSON的常見解析方案有4種

(1)第三方框架:JSONKit、SBJson、TouchJSON(性能從左到右,越差) 

(2)蘋果原生(自帶):NSJSONSerialization(性能最好)

 

2.NSJSONSerialization的常見方法

(1)JSON數據 ——》 OC對象

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

 

(2)OC對象 ——》 JSON數據 

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

3.解析來自服務器的JSON示意圖

四、部分代碼示例

複製代碼
 1 #import "YYViewController.h"
 2 #import "MBProgressHUD+MJ.h"
 3 
 4 @interface YYViewController ()
 5 @property (weak, nonatomic) IBOutlet UITextField *username;
 6 @property (weak, nonatomic) IBOutlet UITextField *pwd;
 7 - (IBAction)login;
 8 
 9 @end
10 
11 @implementation YYViewController
12 
13 - (IBAction)login {
14 //    1.提前的表單驗證
15     if (self.username.text.length==0) {
16         [MBProgressHUD showError:@"請輸入用戶名"];
17         return;
18     }
19     if (self.pwd.text.length==0) {
20         [MBProgressHUD showError:@"請輸入密碼"];
21         return;
22     }
23 //    2.發送請求給服務器(帶上賬號和密碼)
24     //添加一個遮罩,禁止用戶操作
25     [MBProgressHUD showMessage:@"正在努力加載中...."];
26 
27 //
28 //    1.設置請求路徑
29 //    NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];
30 //    NSURL *url=[NSURL URLWithString:urlStr];
31     
32     // 1.設置請求路徑
33     NSURL *URL=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/login"];//不需要傳遞參數
34     
35 //    2.創建請求對象
36     NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默認爲get請求
37     request.timeoutInterval=5.0;//設置請求超時爲5秒
38     request.HTTPMethod=@"POST";//設置請求方法
39     
40     //設置請求體
41     NSString *param=[NSString stringWithFormat:@"username=%@&pwd=%@",self.username.text,self.pwd.text];
42     //把拼接後的字符串轉換爲data,設置請求體
43     request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding];
44     
45     //客戶端類型,只能寫英文
46     [request setValue:@"ios+android" forHTTPHeaderField:@"User-Agent"];
47     
48 //    3.發送請求
49     //獲取一個主隊列
50     NSOperationQueue *queue=[NSOperationQueue mainQueue];
51     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
52         //當請求結束的時候調用(有兩種結果,一個是成功拿到數據,也可能沒有拿到數據,請求失敗)
53         [MBProgressHUD hideHUD];
54         if (data) {//請求成功
55             NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
56             //判斷後,在界面提示登錄信息
57             NSString *error=dict[@"error"];
58             if (error) {
59                 [MBProgressHUD showError:error];
60             }else
61             {
62                 NSString *success=dict[@"success"];
63                 [MBProgressHUD showSuccess:success];
64             }
65         }else   //請求失敗
66         {
67             [MBProgressHUD showError:@"網絡繁忙,請稍後重試!"];
68         }
69     }];
70     NSLog(@"請求發送完畢");
71 }
72 @end

原文轉之:http://www.cnblogs.com/wendingding/p/3815303.html

複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章