我怎么能张贴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或无穷大。
- 查找从服务器收到的NSData的文件types
- MonoTouch.Dialog中的每个RootElement都有一个专用的UIViewController?
- 在SSZipArchive的C头中包含“框架模块内的非模块头”
- 如何在iPhone上同时使用前置摄像头和后置摄像头?
- UINavigationController interactivePopGestureRecognizer在iOS7中工作exception
- ContentView中的button会导致MonoTouch运行时崩溃。 Monotouch 4.0中的错误?
- Xamarin Studio iOS程序集错误
- networking广播/组播在个人热点模式下不由iPhone发送
- MonoTouch – xib.designer.cs丢失UIKit对象完全限定path的文件