2011年7月27日水曜日

【メモ】JSON ArrayでPOST送信する方法(Objective-C)

Objective-C学習中の私は毎日壁にぶつかってばかり。。。

サーバーはJSONICを使ってJSONオンリーでデータの送受信してて、
下の様なデータをサーバーにPOST送信したい時

  1. {  
  2.      "date" : "2011/07/27",  
  3.      "lang" : "Java",  
  4.      "flag" : "true",  
  5.      "newspaper" : [  
  6.               "朝日新聞",  
  7.               "毎日新聞",  
  8.               "読売新聞"  
  9.      ]  
  10. }  

クライアントがJavaとかJavascriptだったらやり方が分かるんだけど、
Objective-Cではどうやれば良いのか分からなかったので
色々調べた。

なぜか日本語のサイトに当たらなくて
海外のサイトに答えがのってました。
本当に助かりました。

  1. NSMutableArray *newspaper = [[NSMutableArray alloc] init];  
  2. if (isAsahi == YES) {  
  3.   [newspaper addObject:@"朝日新聞"];  
  4. }  
  5. if (isMainichi == YES) {  
  6.   [newspaper addObject:@"毎日新聞"];  
  7. }  
  8. if (isNikkei == YES) {  
  9.   [newspaper addObject:@"日経新聞"];  
  10. }  
  11. if (isYomiuri == YES) {  
  12.   [newspaper addObject:@"読売新聞"];  
  13. }  
  14. if (isSankei == YES) {  
  15.   [newspaper addObject:@"産經新聞"];  
  16. }  
  17.   
  18. //送信するパラメータの組み立て  
  19. NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];  
  20. [mutableDic setValue:@"2011/07/27" forKey:@"date"];  
  21. [mutableDic setValue:@"Java" forKey:@"lang"];  
  22. [mutableDic setValue:@"true" forKey:@"flag"];  
  23. [mutableDic setValue:newspaper forKey:@"newspaper"];  
  24.   
  25. //JSONに変換  
  26. NSString *jsonRequest = [mutableDic JSONRepresentation];  
  27.   
  28. //JSONに変換  
  29. NSData *requestData =   
  30.       [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];  
  31.    
  32. NSMutableURLRequest *request;  
  33. request =   
  34.     [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strUrl]   
  35.     cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];  
  36.   
  37. //HTTPメソッドは"POST"  
  38. [request setHTTPMethod:@"POST"];  
  39. [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];  
  40. [request setValue:@"application/json"  
  41.       forHTTPHeaderField:@"Content-Type"];  
  42. [request setValue:[NSString stringWithFormat:@"%d",   
  43.       [requestData length]] forHTTPHeaderField:@"Content-Length"];  
  44. [request setHTTPBody: requestData];  
  45.    
  46. //レスポンス  
  47. NSURLResponse *resp;  
  48. NSError *err;  
  49.    
  50. //HTTPリクエスト送信  
  51. NSData *result = [NSURLConnection sendSynchronousRequest:request   
  52.       returningResponse:&resp error:&err];  

0 件のコメント:

コメントを投稿