我第一次尝试在一个项目上使用 AFNetworking 并且在设置将 float double
转换为 JSON 参数时遇到了麻烦。我正在创建一个带有键值对的 NSDictionary。 NSDictionary 仅接受对象,因此使用 [NSNumber numberWithDouble: 37.234567]
创建 double 值。都好。但是当我转储字典时,我得到:
Dict: {
day = Wednesday;
user = Meltemi;
lat = "37.234567";
long = "-120.123456";
}
其中,当作为 HTTP 请求提交时,变为:
lat=%2237.234567%22
和 long=%22-120.123456%22
并且 Sinatra 将它们接收为:params: { "lat"=>"\"37.750256\"", "long"=>"\"-120.123456\"", ... }
我想要/需要的:
Dict: {
day = Wednesday;
user = Meltemi;
lat = 37.234567;
long = -120.123456;
}
API 很可能不是容错的,但是 如何强制 AFNetworking 丢失引号?
编辑:添加 AFHTTPClient 子类的初始化程序:
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if(!self) return nil;
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
[self setParameterEncoding:AFJSONParameterEncoding];
[self setAuthorizationHeaderWithUsername:@"user" password:@"pwd"];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; // TODO: right place for this?
return self;
}
最佳答案
看起来您是在查询字符串中以 URL 形式编码的形式提交参数;查询字符串中的所有内容都是字符串。
相反,您应该将参数作为 JSON 发送。设置parameterEncoding
HTTP 客户端的属性到 AFJSONParameterEncoding,一切都应该按预期工作。
关于ios - AFNetworking 在格式化 JSON 时将我的 double 转换为带引号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13301845/