如何正确编码json并在Objective C中发送到后端?

2024-07-05 09:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码库:

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以及发送请求的最佳方式是什么?你知道吗


Tags: 代码datainitrequesterrorurlstringallocjsonrequest
1条回答
网友
1楼 · 发布于 2024-07-05 09:27:26

我认为python上的后端不是这样的。我已经将NSDictionary转换为NSData,就像您所做的那样,并使用其他方法,在NodeJS上获得类似的请求体。 似乎NSDictionary没有正确地转换为NSData,因为dictionary的键值是在请求时作为键发送的

从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];

已更新

经过一些调查,我发现,我应该在请求的头中设置内容类型。你知道吗

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

然后发送从NSDictionary转换过来的NSData,工作正常。你知道吗

(注意:我使用ExpressJS作为后端,在中间件中使用body解析器)

相关问题 更多 >