【问题标题】:How can i post json string to server我如何将json字符串发布到服务器
【发布时间】:2014-11-23 12:19:45
【问题描述】:

这是我必须发布的 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 格式发布?

【问题讨论】:

    标签: ios objective-c iphone json xcode


    【解决方案1】:

    这个 Q 我们肯定是重复的,但这里是完整的示例代码,作为一个长例程。只需复制和粘贴即可。

    首先设置 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"];
            }];
    
        }
    

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

    【讨论】:

    • 谢谢,吹你不知道我是怎么填的,但我现在很好。
    • 你就是 Joe Blow ....我一直在寻找这个代码几个月,但我没有收到任何解决方案......现在我明白了!谢谢人,上帝保佑!
    【解决方案2】:

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

    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
    

    【讨论】:

      【解决方案3】:
      • 根据我的观点,您可以将 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:)];
      }
      

      【讨论】:

        【解决方案4】:

        替换:

        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 或无穷大。

        【讨论】:

        • 嗨,Dan - 错误 - 由于未捕获的异常“NSInvalidArgumentException”导致应用程序终止,原因:“*** +[NSJSONSerialization dataWithJSONObject:options:error:]: JSON 写入中的顶级类型无效”
        猜你喜欢
        • 2014-04-27
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多