1. 程式人生 > >iOS網路開發——解析與封裝JSON資料

iOS網路開發——解析與封裝JSON資料


二、解析與封裝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];