[英]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.