繁体   English   中英

我如何将json字符串发布到服务器

[英]How can i post json string to server

这是我必须发布的json字符串...

{
    "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);

接下来,正确异步地将命令和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"];
        }];

    }

希望它可以节省一些键入的时间!

使用以下同步请求,也可以使用异步请求,

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

更换:

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或无穷大。
  • 根据我的观点,您可以将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:)];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM