请求正文json小数被删除

时间:2017-02-21 15:17:28

标签: json scala playframework

我有一个问题,我必须通过POST调用获得JSON。

我实际上必须比较两个包含JSON部分的签名字符串。让我们说他们就像:

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

我所拥有的2个签名应该是相似的,但我从request请求得到jsonValue。其小数被删除0(如12.0变为12)所以签名是不同。

有没有办法避免小数删除?谢谢!

2 个答案:

答案 0 :(得分:2)

这是JSON的“正常”行为,因为JSON标准中12.0和12之间没有区别。

From wiki

  

数字:带符号的十进制数,可能包含小数部分和   可以使用指数E表示法,但不能包含非数字表示法   NaN的。格式不区分整数和   浮点。 JavaScript使用双精度浮点   所有数值的格式,但实现其他语言   JSON可能会对数字进行不同的编码。

所以你不需要打扰你将要发送的内容12.0或12,因为在JSON中没有像“integer”或“float”这样的东西。下一步的下一次转换可能会再次触发它。

<强>更新

你说你需要它来生成签名。 有人会检查这个签名,并且有人也可以将这个JSON转换为某些类型并返回(为什么不呢?就像你这样做),并且可能会收到不同的结果。不同但正确。这里的要点是你不能使用JSON来生成签名(它不仅仅是数字,它只是其中的一个)。你做的事情 - 你使用String来创建签名,而不是JSON。

现在关于字符串,您需要获取原始请求正文。在斯卡拉:

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

答案 1 :(得分:1)

好的,我试着查看Play正文解析器,parse.tolerantText做了强制将json转换为字符串的作业,小数点在这里:)