我第一次尝试在项目中使用AFNetworking,并且无法将float double
设置为JSON参数。我正在创建一个带有键值对的NSDictionary。 NSDictionary只接受对象,因此使用[NSNumber numberWithDouble: 37.234567]
创建双值。都好。但是当我转发字典时,我得到了:
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;
}
答案 0 :(得分:1)
看起来您正在以查询字符串中的表单形式提交参数;查询字符串中的所有内容都是字符串。
相反,您应该将参数作为JSON发送。将HTTP客户端的parameterEncoding
属性设置为AFJSONParameterEncoding,一切都应该按预期工作。
答案 1 :(得分:0)
要发送号码,您可以使用" AFJSONRequestSerializer" 为你的经理。它解决了我同样的问题
答案 2 :(得分:-1)
JSON几乎局限于可以用JavaScript表达的内容(因为它是一个子集),并且JavaScript不支持超过53位浮点数的大数字。由于双精度数通常是64位,如果将数字渲染为数字,这些将在解析期间被截断,这是当您将它们渲染为字符串时要避免的。
但这也意味着你需要将你的消费代码转换回双打(或等价物)。