我有一个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}
hmtdttj41#
play-json创建了一个保留零小数的选项https://github.com/playframework/play-json/pull/831/files只需将-Dplay.json.serializer.preserveZeroDecimal=true添加到VM选项。
-Dplay.json.serializer.preserveZeroDecimal=true
nle07wnf2#
当你说Json.parse(jsonString)时,你会得到一个JsValue,它同时代表键“value”和值“2.0”。要得到2,你需要从结果中查找“value”键:
Json.parse(jsonString)
JsValue
scala> Json.parse(jsonString) \ "value" res4: play.api.libs.json.JsLookupResult = JsDefined(2)
目前2仍然在Json库中表示,要将其提取为原生scala格式,可以在play JsValue上使用as函数:
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
2条答案
按热度按时间hmtdttj41#
play-json创建了一个保留零小数的选项
https://github.com/playframework/play-json/pull/831/files
只需将
-Dplay.json.serializer.preserveZeroDecimal=true
添加到VM选项。nle07wnf2#
当你说
Json.parse(jsonString)
时,你会得到一个JsValue
,它同时代表键“value”和值“2.0”。要得到2,你需要从结果中查找“value”键:目前2仍然在Json库中表示,要将其提取为原生scala格式,可以在play
JsValue
上使用as
函数:需要注意的是,JSON中有许多类型很难表示,比如小数、日期、二进制字符串和正则表达式。如果2和2.0对你很重要,那么你可能需要与最初生成JSON的人联系并讨论。可能你需要用引号括起数字(像字符串一样对待,而不是JsNumber)。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number