是否有可能使Scala的JSON.parseFull()不将整数视为小数?

时间:2013-09-22 16:15:39

标签: json scala

我正在使用JSON.parseFull()解析此字符串。这个方法对我来说非常方便,因为我需要得到一个Map

val jStr = """{"wt":"json","rows":500}"""
println( JSON.parseFull(jStr) )

这是输出:

Some(Map(wt -> json, rows -> 500.0)) // ´rows´ as Double

我想取回一个Integer而不是Double。

Some(Map(wt -> json, rows -> 500)) // ´rows´ as Integer

这可能吗?

2 个答案:

答案 0 :(得分:8)

来自Scala's JSON documentation

  

数字的默认转换为双精度。如果要在全局级别覆盖此行为,可以将globalNumberParser属性设置为您自己的(String => Any)函数。如果您只想在每个线程级别覆盖,那么您可以将perThreadNumberParser属性设置为您的函数

在你的情况下:

val myConversionFunc = {input : String => Integer.parseInt(input)}
JSON.globalNumberParser = myConversionFunc

阶> println(JSON.parseFull(jStr))

一些(地图(重 - - > json,行 - > 500))

答案 1 :(得分:4)

数字的默认转换为 scala

中的 Double

基本上你需要先将默认号码解析器globalNumberParser设置为int

JSON.globalNumberParser = {
  in =>
    try in.toInt catch { case _: NumberFormatException => in.toDouble}
}

val jStr = """{"wt":"json","rows":500}"""
println( JSON.parseFull(jStr) )

输出:

Some(Map(wt -> json, rows -> 500)) // ´rows´ as Integer