如何通过NSURLConnection发送JSON数据

时间:2012-06-05 06:03:03

标签: iphone objective-c json nsurlconnection nsjsonserialization

我已经成功创建了一个方法,它连接到我的Web服务并且POSTS一个字符串并接收一个字符串响应。但是,我现在尝试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吗?

4 个答案:

答案 0 :(得分:1)

尝试以下代码:

let body = NSMutableDictionary()
body.setValue("myString" forKey: "stringType")
body.setValue(data?.base64EncodedString(options: .lineLength64Characters) forKey: "dataType")

这样,您可以在字典中同时包含数据和字符串。这里的'data?.base64EncodedString(options: .lineLength64Characters)'返回带有base64编码的字符串。因此,您的字典仅包含字符串,并且在服务器端,您必须将其转换回数据。

希望它可以解决您的问题。

答案 1 :(得分:0)

您是否尝试过使用JSONKit或RESTKit等框架? RESTKit专门用于与JSON进行Web服务通信,并在内部使用JSONKit和另一个解析器。我认为这将解决您的问题,也许是未来的问题;)

答案 2 :(得分:0)

发出可变请求

 [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];
}

答案 3 :(得分:0)

您需要将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];