iOS網路開發——解析與封裝JSON資料
阿新 • • 發佈:2019-01-25
二、解析與封裝JSON資料
這裡只介紹蘋果原生的API:NSJSONSerialization
1、解析JSON
NSJSONSerialization提供了兩個方法來解析JSON資料:
—JSONObjectWithData:options:error: 根據傳遞進來的JSON資料建立Foundation物件;
—JSONObjectWithStream:options:error: 行為與上一個方法類似,不過接收的資料來源是輸入流。
程式碼示例:
-(void)testJSON{ // 1. 建立URL NSURL *url = [NSURL URLWithString:@"..."]; // 2. 建立請求物件 NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; req.timeoutInterval = 10.0; // 設定請求超時 req.HTTPMethod = @"POST"; // 設定請求方法 // 3. 設定請求體 NSString *param = [NSString stringWithFormat:@"......"]; req.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding]; // 把拼接後的字串轉換為data並設定HTTPBody // 4. 傳送請求 NSOperationQueue *queue = [NSOperationQueue mainQueue]; [NSURLConnection sendAsynchronousRequest:req queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if (data) { // 請求成功 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; }else{ // 請求失敗 NSLog(@"請求失敗"); } }]; }
2、封裝JSON
NSJSONSerialization提供了兩個JSON資料的建立方法
—dataWithJSONObject:options:error:
—writeJSONObject:toStream:options:error:
它還提供了isValidJSONObject:來驗證物件是否可以轉換為JSON。滿足一下條件的物件才能轉換成JSON物件:
- 根物件是NSArray或NSDictionary;
- 所有物件必須是NSString、NSNumber、NSArray、NSDictionary或NSNull;
- 所有的NSDictionary的key必須是NSString;
- NSNumber不能為NaN或無窮大。
// 請求的流程與上面的程式碼類似,這裡只寫出封裝JSON物件的程式碼
NSData *payload = [NSJSONSerialization dataWithJSONObject:myData options:NSJSONWritingPrettyPrinted error:nil];