2017-06-13 28 views
0

我有以下的代码库:对目标C中的json进行编码并将其发送到后端的正确方法是什么?

NSString *urlString = [NSString stringWithFormat:@"ip_address"]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSData *imageData = UIImageJPEGRepresentation(imageToPost, 1.0); 
NSString *imageDataEncoded = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 

NSMutableDictionary *jsonRequest = [[NSMutableDictionary alloc] init]; 
    [jsonRequest setObject:imageDataEncoded forKey:@"data"]; 
NSError *error; 
NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:jsonRequest options:NSJSONReadingAllowFragments error:&error]; 

[request setHTTPBody:dataFromDict]; 

这是正确的方式?

在那里我有使用Python请求库以接收该请求,并解析JSON后端,我有一个行代码如下:

print(base64.b64decode(request.form.get('data')) 

这将打印请求的前几个字符如下:

ImmutableMultiDict([('{"data":"\\/9j\\/4AAQSkZJRgABAQAASA` 

正如你可以看到它真的不是一个JSON,因为它有几个'标记。

我该如何最好地处理收到的JSON,以及发送请求的最佳方式是什么?

回答

1

我不认为这是在python后端的情况。我已经将NSDictionary转换为NSData,就像您已经完成的操作一样,并使用其他方法,并在NodeJS上获得类似的请求体。 看来NSDictionary中不会转换为NSData的正确,因为字典的键值作为重点从NSDictionary的发送要求

帖子正文数据: NSDictionary to NSData

但是,把从的NSString的NSData提供了更多可靠的JSON数据:

NSData *imageData = UIImageJPEGRepresentation(imageToPost, 1.0); 
NSString *imageDataEncoded = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 

NSString *postString = [NSString stringWithFormat:@"data=%@", imageDataEncoded]; 
NSData *bodyData = [postString dataUsingEncoding:NSUTF8StringEncoding]; 

[request setHTTPBody:bodyData]; 

修订

一些调查,我已经˚F后呃,我应该在请求的标题中设置Content-Type。

[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

然后发送从NSDictionary转换NSData按预期工作。

(注意:我使用ExpressJS作为中间件中的body-parser的后端)

相关问题