ios - AFNetworking 在格式化 JSON 时将我的 double 转换为带引号的字符串

标签 ios json encoding nsdictionary afnetworking

我第一次尝试在一个项目上使用 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%22long=%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/

相关文章:

iphone - 对象和 NSPredicate

python - 使用python将带有俄语字符的二维数组打印到csv

ios - Xcode:为什么你不能先清理然后一步构建?

javascript - Chrome 和 IE 自动对 JSON 对象进行排序,如何禁用它?

json - oAuth 使用 SwiftyJSON 读取结果?

java - 使用 Jackson 进行动态对象映射

ruby - 如何将 5 位二进制字符串转换为字母字符?

php - 用 PHP 显示日文字符

iphone - 功能测试应该模拟 UI 事件还是检查先决条件?

ios - iAd付款细节