Reputation: 79
This is json string that I have to post...
{
"data": {
"description": "",
"current_value": "",
"serialno": "",
"condition": "",
"category": "category",
"purchase_value": "",
"new_or_used": "",
"gift_or_purchase": "",
"image": ""
},
"subtype": "fd3102d8-bc19-424b-bca2-774a8fd7ea6f"
}
How to post as JSON?
Upvotes: 2
Views: 5815
Reputation: 936
Replace:
NSData *postData = [jsonString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
With:
NSError *error;
NSData *postdata = [NSJSONSerialization dataWithJSONObject:jsonString options:0 error:&error];
An object that may be converted to JSON must have the following properties:
Upvotes: 0
Reputation: 529
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:)];
}
Upvotes: 0
Reputation: 12621
Surely this Q us a duplicate, but here's full example code, as one long routine. Just copy and paste.
First set up the 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);
Next, correctly asynchronously send the command and json to your server...
#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
Finally, (A) connect correctly using NSURLConnection, and (B) correctly interpret the information which comes back to you from your server.
[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"];
}];
}
Hope it saves someone some typing!
Upvotes: 3
Reputation: 1490
Use following shnchronous request, you can use asynchronous request as well,
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
Upvotes: 1