[英]How to send JSON data over NSURLConnection
我已经成功创建了一种方法,该方法连接到我的Web服务并向字符串发送POST并接收字符串响应。 但是,我现在尝试发布使用NSJSONSerialization创建的JSON字典。 但是,Xcode给我一个错误。 我试图转换我的初始代码。 相关行如下...
NSData* loginDataJSON = [NSJSONSerialization dataWithJSONObject:loginDataDictionary options:NSJSONWritingPrettyPrinted error:&error];
[request setValue:loginDataJSON forHTTPHeaderField:@"loginDataJSON"];
[request setHTTPBody:[loginDataJSON dataUsingEncoding:NSUTF8StringEncoding]];
第二行在这里抱怨我在需要NSString的地方使用NSData。 第三行抱怨loginDataJSON
可能不响应dataUsingEnconding
我似乎在强迫NSData对象(因为NSJSONSerialization给了我什么)不能使用它。 我最好是尝试将JSON转换为字符串以与现有请求代码一起使用,还是应该/可以更改请求代码以接受NSData而不是NSString?
试试这个代码:
let body = NSMutableDictionary()
body.setValue("myString" forKey: "stringType")
body.setValue(data?.base64EncodedString(options: .lineLength64Characters) forKey: "dataType")
这样,您可以在字典中同时包含数据和字符串。 在这里, 'data?.base64EncodedString(options: .lineLength64Characters)'
将返回具有base64编码的字符串。 因此,您的字典仅包含字符串,并且在服务器端,您必须将其转换回数据。
希望它能解决您的问题。
您是否尝试过使用JSONKit或RESTKit之类的框架? RESTKit专门用于与JSON进行Web服务通信,并且内部使用JSONKit和另一个解析器。 我认为这可以解决您的问题,甚至可以解决将来的问题;)
提出可变要求并
[request setHTTPBodyWithString:myMessageJSON];
其中方法如下:
- (void)setHTTPBodyWithString:(NSString *)body {
NSData *bodyData = [body dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
[self setValue:[NSString stringWithFormat:@"%d", [bodyData length]] forHTTPHeaderField:@"Content-Length"];
[self setHTTPBody:bodyData];
}
您需要发送JSON作为请求的主体,并可能设置内容类型和内容长度:
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:nil];
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
[request setValue:[NSString stringWithFormat:@"%d", [loginDataJSON length]] forHTTPHeaderField:@"content-length"];
[request setHTTPBody:loginDataJSON];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.