2017-02-21 3 views
1

私はPOSTコールから取得する必要があるJSONに問題があります。リクエストボディjson小数点が削除されました

実際には、どちらもJSON部分を1つのポイントに含む2つのシグネチャ文字列を比較する必要があります。のは、彼らが似ているとしましょう:

val signature = "someText+" + Json.stringify(jsonValue) + "+anotherText" 

私は似ているようになっているしているが、私はrequest.bodyから取得jsonValueは0との小数を削除しました(ような12.012なります)ので、署名が異なる2人の署名。

小数点の削除を避ける方法はありますか?ありがとう!

+0

はないオプションをデシリアライズされていますか? – Coder

答えて

2

JSON標準で12.0と12の間に違いがないので、JSONの「通常の」動作です。

From wiki

番号:小数部を含んでいてもよく、 は指数E表記を使用してもよいが、 NaNのような非数値を含めることができない符号付き10進数。この形式では、整数と 浮動小数点の区別はありません。 JavaScriptではすべての数値に倍精度浮動小数点 形式が使用されていますが、 JSONを実装している他の言語では、数値が異なるようにエンコードされることがあります。

したがって、JSONに「整数」や「浮動小数点数」のようなものがないため、12.0または12をさらに送信する必要はありません。次のステップの次の変換は、それを再びフリップフロップすることができます。

UPDATE

あなたが署名を生成するためにそれを必要とすると言います。 誰かがこのシグネチャをチェックし、誰かがこのJSONをいくつかのタイプとバックに変換することができます(あなたと同じようになぜですか?)、別の結果を受け取る可能性があります。異なるが正しい。ここでの主なポイントは、JSONを使用して署名を生成することができないことです(数字だけでなく、ポイントの1つにすぎません)。あなたは、JSONではなく、署名を作成するためにStringを使用します。

文字列については、生のリクエストボディを取得する必要があります。 Scalaで:

def index = Action(parse.tolerantText) { request => 
    val jsonAsString = request.body 
} 
+0

はい、私はあなたが何を意味するのか見ていますが、私はこれと他の多くのフィールドを使用して文字列の署名を構築する必要があるので、それを持っている別のものと比較する必要があるので.0またはそれ以外の文字列を変更します – Guigui

+0

私の更新 –

1

さて、私はプレイ本体のパーサを見てみましたとparse.tolerantTextは、文字列にJSONを変換強制的に仕事をしたし、小数はここにある:)

関連する問題