How can i post json string to server

前端 未结 4 1791
清歌不尽
清歌不尽 2020-12-16 08:22

This is json string that I have to post...

{
    \"data\": {
        \"description\": \"\",
        \"current_value\": \"\",
        \"serialno\": \"\",
            


        
相关标签:
4条回答
  • 2020-12-16 08:52

    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
    
    0 讨论(0)
  • 2020-12-16 08:53
    • As per my point of view you can Use NSURLSeession with Asyn request (Try to implement 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:)];
    }
    
    0 讨论(0)
  • 2020-12-16 08:58

    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!

    0 讨论(0)
  • 2020-12-16 09:04

    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:

    • The top level object is an NSArray or NSDictionary.
    • All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.
    • All dictionary keys are instances of NSString.
    • Numbers are not NaN or infinity.
    0 讨论(0)
提交回复
热议问题