已删除请求正文json小数
我对从POST调用中获得的JSON有一个问题 实际上,我必须比较两个签名字符串,它们都包含一个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标准中
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的字符串会改变一切,因为我必须将它与另一个有它的字符串进行比较