在iphone的post请求中发送json数据
Posted
技术标签:
【中文标题】在iphone的post请求中发送json数据【英文标题】:Sending json data in post request in iphone 【发布时间】:2013-05-30 14:37:26 【问题描述】:我正在尝试在 post 请求中将 JSON 数据发送到引发错误的服务器。我正在创建以下格式的数据
NSDictionary *o1 = [[NSMutableDictionary alloc] init];
[o1 setValue:@"51" forKey:@"merchantProductId"];
[o1 setValue:@"Big Paulie" forKey:@"name"];
[o1 setValue:@"1" forKey:@"quantity"];
NSDictionary *o2 = [[NSMutableDictionary alloc] init];
[o2 setValue:@"52" forKey:@"merchantProductId"];
[o2 setValue:@"Paulie" forKey:@"name"];
[o2 setValue:@"10" forKey:@"quantity"];
NSMutableArray *pizzas = [NSMutableArray arrayWithObjects:o1, o2, nil];
NSDictionary *o3 = [[NSMutableDictionary alloc] init];
[o3 setValue:@"3" forKey:@"merchantId"];
[o3 setValue:pizzas forKey:@"pizzas"];
NSMutableArray *orderArray = [NSMutableArray arrayWithObjects:o3, nil];
NSData *jsData = [NSJSONSerialization dataWithJSONObject:orderArray options:NSJSONWritingPrettyPrinted error:nil];
NSString *data = [NSString stringWithFormat:@"data=%@",[[NSString alloc] initWithData:jsData encoding:NSUTF8StringEncoding]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http:61.12.124.234:60/upload_image/phoneTesting.php"]]];
[request setHTTPMethod:@"POST"];
// [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
NSHTTPURLResponse* urlResponse = nil;
error = [[NSError alloc] init];
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"Response: %@", result);
在服务器中,我需要的数据应该像这样显示
"pizzas" : [
"quantity" : "1",
"merchantProductId" : "51",
"name" : "Big Paulie"
,
"quantity" : "10",
"merchantProductId" : "52",
"name" : "Paulie"
],
"merchantId" : "3"
但我得到了
(
[data] => [
"pizzas" : [
"quantity" : "1",
"merchantProductId" : "51",
"name" : "Big Paulie"
,
"quantity" : "10",
"merchantProductId" : "52",
"name" : "Paulie"
],
"merchantId" : "3"
]
)
当我尝试只发送 jsData 时,它不会发送任何带有请求集的东西。
请建议我如何在 post 请求中发送唯一的 json 数据。
我正在使用 xcode4.5
【问题讨论】:
postData
在哪里初始化?
上面有几个值没有明显的初始化。而且尚不清楚您的 jsData 是如何将其放入请求中的。请提供完整代码。
【参考方案1】:
我想知道你为什么要这样做:
NSString *data = [NSString stringWithFormat:@"data=%@",
[[NSString alloc] initWithData:jsData encoding:NSUTF8StringEncoding]];
如果是 GET 请求,则需要键值对,但您只是发送 POST 数据,不需要键。
我认为这就是为什么你会变得如此傲慢的[data] = entry
。如果你成功了:
NSString *data = [NSString stringWithFormat:@"%@",
[[NSString alloc] initWithData:jsData encoding:NSUTF8StringEncoding]];
有效吗?
【讨论】:
不知道它是如何工作的,因为“数据”显然从未被使用过。 是的,你是对的。如果 data 真的是 postdata,那么我可能会在这里找到一些东西。看起来他认为他需要带有 POST 有效负载的 GET 语法。【参考方案2】:在我看来,您在这一行中序列化了错误的对象:
NSData *jsData = [NSJSONSerialization dataWithJSONObject:orderArray
options:NSJSONWritingPrettyPrinted error:nil];
为什么要序列化包含字典的数组?当然,您应该只是序列化字典本身。
NSData *jsData = [NSJSONSerialization dataWithJSONObject:o3
options:NSJSONWritingPrettyPrinted error:nil];
【讨论】:
以上是关于在iphone的post请求中发送json数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务
如何使用 C# 在 POST 请求中发送 json 数据 [重复]
如何使用 C# 在 POST 请求中发送 json 请求正文数据