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

Max*_*Max 9 json scala

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

val jStr = """{"wt":"json","rows":500}"""
println( JSON.parseFull(jStr) )
Run Code Online (Sandbox Code Playgroud)

这是输出:

Some(Map(wt -> json, rows -> 500.0)) // ´rows´ as Double
Run Code Online (Sandbox Code Playgroud)

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

Some(Map(wt -> json, rows -> 500)) // ´rows´ as Integer
Run Code Online (Sandbox Code Playgroud)

那可能吗?

Die*_*sch 8

来自Scala的JSON文档

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

在你的情况下:

val myConversionFunc = {input : String => Integer.parseInt(input)}
JSON.globalNumberParser = myConversionFunc
Run Code Online (Sandbox Code Playgroud)

scala> println(JSON.parseFull(jStr))

一些(Map(wt - > json,rows - > 500))


Ala*_*ine 6

数字的默认转换在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) )
Run Code Online (Sandbox Code Playgroud)

输出:

Some(Map(wt -> json, rows -> 500)) // ´rows´ as Integer
Run Code Online (Sandbox Code Playgroud)