簡體   English   中英

如何通過NSURLConnection發送JSON數據

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM