Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已删除请求正文json小数_Json_Scala_Playframework - Fatal编程技术网

已删除请求正文json小数

已删除请求正文json小数,json,scala,playframework,Json,Scala,Playframework,我对从POST调用中获得的JSON有一个问题 实际上,我必须比较两个签名字符串,它们都包含一个JSON部分。比如说,他们就像: val signature = "someText+" + Json.stringify(jsonValue) + "+anotherText" 我拥有的两个签名应该是相似的,但是我从request.body获得的jsonValue删除了0的小数(比如12.0变成12),因此签名是不同的 有没有办法避免小数点的删除?谢谢 这是JSON的“正常”行为,因为JSON标准中

我对从POST调用中获得的JSON有一个问题

实际上,我必须比较两个签名字符串,它们都包含一个JSON部分。比如说,他们就像:

val signature = "someText+" + Json.stringify(jsonValue) + "+anotherText"
我拥有的两个签名应该是相似的,但是我从request.body获得的
jsonValue
删除了0的小数(比如
12.0
变成
12
),因此签名是不同的

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

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

:

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

因此,您无需担心将进一步发送什么12.0或12,因为JSON中没有“整数”或“浮点”之类的东西。下一步的下一次转换可能会再次触发它

更新

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

现在关于字符串,您需要获取原始请求主体。在Scala中:

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

好的,我试着查看Play body解析器,然后
parse.tolerantText
强制将json转换为字符串,小数点在这里:)

反序列化不是一个选项吗?是的,我明白你的意思,但问题是我必须使用此字段和许多其他字段构建一个字符串签名,因此带.0或不带.0的字符串会改变一切,因为我必须将它与另一个有它的字符串进行比较