10

我正在使用 JSON.parseFull() 解析这个字符串。这种方法对我来说真的很方便,因为我需要获取地图

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

那可能吗?

4

2 回答 2

8

来自Scala 的 JSON 文档

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

在你的情况下:

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

scala> println( JSON.parseFull(jStr) )

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

于 2013-09-22T21:38:10.047 回答
6

数值的默认转换是scala中的Double

基本上你需要将默认数字解析器设置globalNumberParserintfirst

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
于 2015-10-01T13:00:10.780 回答