scala JSON解析删除小数尾随零

k4ymrczo  于 2023-03-30  发布在  Scala
关注(0)|答案(2)|浏览(159)

我有一个Json字符串,在解析后我希望它保持十进制形式。

import play.api.libs.json._

val jsonString = """{"value":2.0}"""

println(jsonString)
println(Json.parse(jsonString))

上面代码的输出是:

{"value":2.0}
{"value":2}

我需要它

{"value":2.0}
{"value":2.0}
hmtdttj4

hmtdttj41#

play-json创建了一个保留零小数的选项
https://github.com/playframework/play-json/pull/831/files
只需将-Dplay.json.serializer.preserveZeroDecimal=true添加到VM选项。

nle07wnf

nle07wnf2#

当你说Json.parse(jsonString)时,你会得到一个JsValue,它同时代表键“value”和值“2.0”。要得到2,你需要从结果中查找“value”键:

scala> Json.parse(jsonString) \ "value"
res4: play.api.libs.json.JsLookupResult = JsDefined(2)

目前2仍然在Json库中表示,要将其提取为原生scala格式,可以在play JsValue上使用as函数:

# For a whole number
scala> (Json.parse(jsonString) \ "value").as[Int]
res8: Int = 2

# For a decimal, like you want!!
scala> (Json.parse(jsonString) \ "value").as[Double]
res10: Double = 2.0

需要注意的是,JSON中有许多类型很难表示,比如小数、日期、二进制字符串和正则表达式。如果2和2.0对你很重要,那么你可能需要与最初生成JSON的人联系并讨论。可能你需要用引号括起数字(像字符串一样对待,而不是JsNumber)。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

相关问题