如何将 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
.
contactsArray
是NSArray
?您正在创建一个只有一个对象的 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 设备发送到 Rails 服务器