如何将 JSON 数据发布到 iOS 中的服务器?

Posted

技术标签:

【中文标题】如何将 JSON 数据发布到 iOS 中的服务器?【英文标题】:How to post JSON data to server in iOS? 【发布时间】:2015-10-06 10:13:01 【问题描述】:

我正在尝试将 JSON 数据发送到服务器,但它没有发送到服务器。我正在从服务器端打印nil 数据,但没有用。这里我使用代码将数据发布到服务器

NSError *error;
NSDictionary *dict=@
                     @"allgroups": @
                             @"groupname": @"prasad",
                             @"group_id":@"26",
                             @"user_id":@"8",
                             @"contacts": @[contactsArray]
                             
                     ;

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dict  
                                                   options:NSJSONWritingPrettyPrinted 
                                                     error:&error];

NSString *saveString = [[NSString alloc] initWithData:jsonData 
                                             encoding:NSUTF8StringEncoding];

NSString *myRequestString = [NSString stringWithFormat:@"%@",saveString];
NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: [NSString stringWithFormat:@"http://example.php"]]];

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPMethod: @"POST"];

//post section
[request setHTTPBody: myRequestData];
NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSString *returnString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];

NSLog(@"String value is:: %@",returnString);

请帮助我。提前谢谢

【问题讨论】:

奇怪的NSData -> NSString -> NSString (复制) -> NSData. contactsArrayNSArray?您正在创建一个只有一个对象的 NSArray ,另一个 NSArray ?只是指出这可能是一个问题。否则,nil 到底是什么?什么显示“错误”?另外,正如 Droppy 所说,还有奇怪的“圆形”变换。 我遵循了你的指导方针,但我仍然只在服务器端收到类似 :NIL 的响应,我只使用“打印”功能 @Larme :contactsArray 是 nsmutablearray,它有 6 个键值对 请检查我在“pastie.org/private/e7ualpuhknlswytp4ocijg”中的代码并帮助我兄弟 【参考方案1】:

以下功能对我有用。您可以使用它:

-(NSMutableArray*)Post_method:(NSString*)post_string posturl:(NSString *)post_url

    NSString *post =post_string;
    NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",kBaseURL,post_url]];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
    [request setURL:url];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    NSError *error;
    NSURLResponse *response;
    NSData *responseData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString* aStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
    SBJSON *json=[[SBJSON alloc]init];
    NSMutableArray *resultp=[json objectWithString:aStr];
    //NSLog(@"result   %@ ",resultp);
    return  results;

并将此函数称为:

[self Post_method:[NSString stringWithFormat:@"%@",jsonString] posturl:@""];

【讨论】:

在我的情况下,添加 [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];解决了问题。【参考方案2】:

您应该像这样直接将您的jsonData 传递给NSMutableURLRequest

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: [NSString stringWithFormat:@"http://example.php"]]];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPMethod: @"POST"];
[request setHTTPBody:jsonData];

【讨论】:

以上是关于如何将 JSON 数据发布到 iOS 中的服务器?的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 动态发布到 IOS 8 中的 URL 地址

将多个 json 对象存储到文本文件 iOS

如何将数组作为参数发送到iOS中的json服务

如何将 json 从 iOS 设备发送到 Rails 服务器

我将一些数据发送到 web 服务,它返回一些 JSON 作为 NSData。如何转换为字典?(iOS 4.3)

如何将 json post 值发送到远程服务器并使用 iOS 5 获取结果?