我怎么能张贴JSONstring到服务器

这是jsonstring,我必须发布…

{ "data": { "description": "", "current_value": "", "serialno": "", "condition": "", "category": "category", "purchase_value": "", "new_or_used": "", "gift_or_purchase": "", "image": "" }, "subtype": "fd3102d8-bc19-424b-bca2-774a8fd7ea6f" } 

如何发布为JSON?

当然这个问题我们是重复的,但是这里是完整的示例代码,就像一个很长的例程。 只需复制并粘贴。

首先设置JSON …

 -(void)sendTestJsonCommand { NSMutableDictionary *dict = @{ @"heights":@"4_5_7", @"score":@"4", @"title":@"Some Title", @"textBody":@"Some Long Text", @"happy":@"y" }.mutableCopy; NSError *serr; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&serr]; if (serr) { NSLog(@"Error generating json data for send dictionary..."); NSLog(@"Error (%@), error: %@", dict, serr); return; } NSLog(@"Successfully generated JSON for send dictionary"); NSLog(@"now sending this dictionary...\n%@\n\n\n", dict); 

接下来,正确地asynchronous发送命令和JSON到您的服务器…

 #define appService [NSURL \ URLWithString:@"http://www.corp.com/apps/function/user/pass/id/etc"] // Create request object NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:appService]; // Set method, body & content-type request.HTTPMethod = @"POST"; request.HTTPBody = jsonData; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setValue: [NSString stringWithFormat:@"%lu", (unsigned long)[jsonData length]] forHTTPHeaderField:@"Content-Length"]; // you would almost certainly use MBProgressHUD at this point // to display some sort of spinner or similar action on the UX 

最后,(A)使用NSURLConnection正确连接,(B)正确解释从您的服务器返回给您的信息。

  [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *r, NSData *data, NSError *error) { if (!data) { NSLog(@"No data returned from server, error ocurred: %@", error); NSString *userErrorText = [NSString stringWithFormat: @"Error communicating with server: %@", error.localizedDescription] return; } NSLog(@"got the NSData fine. here it is...\n%@\n", data); NSLog(@"next step, deserialising"); NSError *deserr; NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&deserr]; NSLog(@"so, here's the responseDict\n\n\n%@\n\n\n", responseDict); // LOOK at that output on your console to learn how to parse it. // to get individual values example blah = responseDict[@"fieldName"]; }]; } 

希望它可以节省一些人打字!

使用下面的shnchronous请求,你也可以使用asynchronous请求,

 NSError *error; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:<Your API URL>]]; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:<Your Mutable NSDictionary> options:NSJSONReadingMutableContainers error:&error]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:jsonData]; NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; //NSLog(@"results string = %@",[[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]); NSDictionary *temp= [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:nil];// This will convert Data to Json format 
  • 根据我的观点,你可以使用NSURLSeession与Asyn请求(尝试实现NSURLSession)

NSData * postData = [NSJSONSerialization dataWithJSONObject:Data options:0 error:&error];

 if (!error) { NSString *urlpart = [NSString stringWithFormat:@“Your URL]; NSURL *requestUrl = [NSURL URLWithString:urlpart]; NSMutableURLRequest *URLRequest = [NSMutableURLRequest requestWithURL:requestUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; URLRequest.allowsCellularAccess=YES; [URLRequest setHTTPMethod:@"POST"]; [URLRequest setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [URLRequest setHTTPBody:postData]; WebServiceManager *webserviceManager = [[WebServiceManager alloc] init];// this is your comman class for webServices connections [webserviceManager sendRequest:URLRequest withOwner:self successAction:@selector(delegateMethod:) failAction:@selector(Error:)]; } 

更换:

 NSData *postData = [jsonString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

附:

 NSError *error; NSData *postdata = [NSJSONSerialization dataWithJSONObject:jsonString options:0 error:&error]; 

可以转换为JSON的对象必须具有以下属性:

  • 顶级对象是NSArray或NSDictionary。
  • 所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。
  • 所有的字典键都是NSString的实例。
  • 数字不是NaN或无穷大。