2017-02-21 64 views
1

我有一個JSON問題,我必須從我的POST調用中獲取。請求正文json小數刪除

我實際上必須比較兩個包含一個JSON部分的簽名字符串。比方說,他們是這樣的:

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

的2個簽名我也應該是類似的,但我jsonValue從request.body獲得具有與0去掉小數(如12.0變得12),所以簽名是不同的。

有什麼辦法可以避免小數點去除?謝謝!

+0

是反序列化不是一種選擇? – Coder

回答

2

這是JSON的「正常」行爲,因爲JSON標準中12.0和12之間沒有區別。

From wiki

號碼:可能包含一個小數部分和 可以使用指數E符號,但不能包括像 的NaN非數字的符號十進制數。該格式並不區分整數和浮點數。 JavaScript對其所有數值都使用雙精度浮點型 格式,但實現JSON的其他語言可能會對數字進行不同的編碼。

所以你不需要打擾你會發送進一步的12.0或12,因爲在JSON中沒有像「integer」或「float」這樣的東西。下一步的下一次轉換可能會再次觸發它。

UPDATE

你說你需要生成一個簽名。 有人會檢查此簽名,並且某人也可以將此JSON轉換爲某些類型並返回(爲什麼不呢?就像您一樣),並且可能會收到不同的結果。不同但正確。這裏的要點是你不能使用JSON來生成一個簽名(它不僅僅是數字,它只是其中的一個要點)。你做的事 - 你使用String來創建簽名,而不是JSON。

現在關於字符串,您需要獲取原始請求正文。在斯卡拉:

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

是的,我明白你的意思,但事情是我必須使用這個和其他許多字段建立一個字符串簽名,所以一個字符串與.0或不會改變一切,因爲我必須與另一個有它的 – Guigui

+0

看看我的更新 –

1

好吧,我想看看播放身體解析器和parse.tolerantText做的工作,迫使JSON轉換爲字符串,小數在這裏:)