2

初めてプロジェクトで AFNetworking を使用しようとしていますが、floatdoubleを JSON パラメーターに変換する設定に問題があります。キーと値のペアで NSDictionary を作成しています。NSDictionary はオブジェクトのみを受け入れるため、 double 値は で作成され[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;
}
4

3 に答える 3

1

クエリ文字列でフォーム エンコードされた URL としてパラメーターを送信しているようです。クエリ文字列内のすべてが文字列です。

代わりに、パラメーターを JSON として送信する必要があります。parameterEncodingHTTP クライアントのプロパティを AFJSONParameterEncoding に設定すると、すべてが期待どおりに機能するはずです。

于 2012-11-09T16:11:33.057 に答える
0

番号を送信するには、マネージャーに「AFJSONRequestSerializer」を使用できます。それは私の同じ問題を解決しました

于 2014-04-02T15:04:56.063 に答える
-1

JSON は JavaScript で表現できるものにかなり制限されており (サブセットであるため)、JavaScript は 53 ビット浮動小数点を超える大きな数をサポートしていません。double は通常 64 ビットであるため、数値としてレンダリングすると解析中に切り捨てられます。これは、文字列としてレンダリングするときに回避することです。

ただし、これは、使用するコードが double (または同等のもの) に変換し直す必要があることも意味します。

于 2012-11-09T05:21:15.367 に答える