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 数据 - ios

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

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

将数据从 PHP 脚本发送到 iOS

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

如何通过 iOS 中的 JSON webservices post 方法将一组图像发送到服务器?