在iOS中,我想在URL中发送JSON数据以进行服务调用。我尝试了下面的代码剪切,但编码的URL似乎错了。因为在JSON中,键和值之间有一个冒号字符(:),逗号字符(,)用于分隔。但是,我无法将冒号(:)编码为%3A ,将逗号(,)编码为%2C
代码段:
- (NSURL *)getEncodedUrl {
// Build dictionnary with parameters
NSString *abc = @"abc";
NSNumber *limitNumber = [NSNumber numberWithInt:2];
NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary];
[dictionnary setObject:limitNumber forKey:@"limit"];
[dictionnary setObject:abc forKey:@"abc"];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary options:0 error:&error];
if (!jsonData) {
debug("Json error %@",error);
return nil;
} else {
NSString *JSONString = [[NSString alloc] initWithBytes:[jsonData bytes] length:[jsonData length] encoding:NSUTF8StringEncoding];
debug("Json op %@",JSONString);
NSString* params = [JSONString stringByAddingPercentEscapesUsingEncoding:
NSASCIIStringEncoding];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://baseUrl.com?param=@",params]];
debug("URL = %@",url);
return url;
}
}
输出:〜
网址= http://baseUrl.com?param=%7B%22abc%22:%22abc%22,%22limit%22:2%7D
(包括冒号和逗号字符)
但我想跟随o / p:
http://baseUrl.com?param=%7B%22abc%22%3A%22abc%22%2C%22limit%22%3A2%7D
(没有冒号和逗号字符)
我现在提到的在线编码 - 解码网站。
答案 0 :(得分:0)
你可以简单地使用
NSString *url = @"http://baseUrl.com?param=%7B%22abc%22:%22abc%22,%22limit%22:2%7D";
NSString *encodeImgUrl = [url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
答案 1 :(得分:0)
我建议您将JSON作为POST数据而不是您正在使用的GET发送。将它打包为MIME数据会更直接,你所做的任何编码都会更容易理解。
答案 2 :(得分:0)
所以你试图在这里生成一个URL的查询部分。冒号是包含在URL查询中的完全合法的字符。我写了一篇文章,介绍了在Cocoa中转义URL查询的复杂性:
http://www.mikeabdullah.net/escaping-url-queries-in-cocoa.html
由于您希望执行额外的转义,我建议您使用我的示例代码并将其扩展为特别要求转义:
和;
个字符。
答案 3 :(得分:0)
我在API调用中犯了小错误,这就是为什么我得错了结果。无需将冒号(:)编码为%3A,将逗号(,)编码为%2C。
我想与您分享一件事。您可以使用base64字符串而不是编码JSON部分。