iOS 将字符串发送到 JSON 服务器
Posted
技术标签:
【中文标题】iOS 将字符串发送到 JSON 服务器【英文标题】:iOS send string to JSON Server 【发布时间】:2013-05-24 04:47:52 【问题描述】:我为此苦苦挣扎了几个小时,我想将一个 json 字符串发送到 asp.net 服务器,但我总是得到空响应。我的代码有什么问题吗?还是服务器端有问题? 非常感谢..
(为了安全起见隐藏了url),这是更新代码..
NSError *error;
NSDictionary* jsonDict = @@"FundCode": @(1), @"TotalAmount":@(1000000), @"PaymentType":@(0), @"Bank":@"AAA BANK",@"BankAccountNo": @"123456789",@"Amount":@"1000000",
@"DepositFile":@"asset.PNG";
NSData* postData = [NSJSONSerialization dataWithJSONObject:jsonDict options:kNilOptions error:&error];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSURL *url1 = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.url.com"]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url1];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
【问题讨论】:
在NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
中传递nil
而不是传递NSError*
对象并尝试打印错误。
请使用jsonlint.com验证您的json json也可能有问题。
你的技术看起来很脆弱。容易出错。检查我的正确方法here
【参考方案1】:
您可以尝试使用 Cocoa 的内置 JSON 序列化来获取您的 JSON 数据,而不是自己提供转义字符串。这排除了不正确的转义等。
NSError* error = nil;
NSDictionary* jsonDict = @@"FundCode": @(1), @"TotalAmount":@(1000000), @"PaymentType":@(0), @"Bank":@"AAA BANK";
NSData* postData = [NSJSONSerialization dataWithJSONObject:jsonDict options:kNilOptions error:&error];
请注意,我没有指定所有键 - 您需要在发送请求之前完成字典。
【讨论】:
我已经试过了,但还是没有反应..还是没有运气..请看我的更新代码... 您能否将 &error 对象传递给您的 sendSynchronousRequest 调用并将其记录到控制台。也许 JSON 没问题,但请求还有其他问题? 嗨,这是来自服务器的响应 TopUpOnlineMessage = " - "; 在您之前的评论中您说过,您仍然没有收到任何响应,但您发布的字符串看起来像是一个完全有效的 JSON 响应? 你好weichsel,目前我们通过再次发送json字符串进行测试,所以响应必须是我发送的字符串,资金代码,totalamount等。如果我的代码正常,是否有可能是问题在服务器上?谢谢【参考方案2】:朋友,您传递了错误的方法(因为您将其作为 NSString 发送) 对于 JSON 用这个方法
NSError* errorJson = nil;
NSDictionary* jsonDict = @@"FundCode": @(1), @"TotalAmount":@(1000000), @"PaymentType":@(0), @"Bank":@"AAA BANK",@"BankAccountNo": @"123456789",@"Amount":@@"1000000",
@"DepositFile":@"asset.PNG";
NSData* postData = [NSJSONSerialization dataWithJSONObject:jsonDict options:kNilOptions error:&errorJson];
希望这会有所帮助..
【讨论】:
【参考方案3】:您还可以使用 NSKeyArchiever 将 NSDictionary json 编码为 postData,如下所示
NSMutableDictionary *postDix=[[NSMutableDictionary alloc] init];
[postDix setValue:@"1" forKey:@"FundCode"];
[postDix setValue:@"1000000" forKey:@"TotalAmount"];
[postDix setValue:@"0" forKey:@"PaymentType"]; //etc
NSMutableData *postData = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:postData];
[archiver encodeObject:postDix forKey:@"json"];
[archiver finishEncoding];
【讨论】:
以上是关于iOS 将字符串发送到 JSON 服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何将 json post 值发送到远程服务器并使用 iOS 5 获取结果?
如何将 json 从 iOS 设备发送到 Rails 服务器