2013-09-22 37 views
6

我使用JSON.parseFull()解析這個字符串。這種方法真的很方便我,因爲我需要得到一個Map是否有可能使Scala的JSON.parseFull()不將整數視爲小數?

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

這裏的輸出:

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

我想找回一個整數,而不是雙。

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

這可能嗎?

回答

7

Scala's JSON documentation

預設的轉換爲NUMERICS是成雙。如果您希望在全局級別覆蓋此行爲,可以將globalNumberParser屬性設置爲您自己的(String => Any)函數。如果你只是想在每個線程級覆蓋,那麼你可以在你的情況perThreadNumberParser屬性設置爲你的函數

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

斯卡拉>的println(JSON.parseFull(jStr))

一些(地圖(重量 - > JSON,行 - > 500))

+0

多麼糟糕!這意味着我需要把所有的數字看作是整數或小數......對於我作爲例子發佈的情況是好的,但是如果我必須處理混合大小寫的數字呢?如果我可以將非小數部分作爲整數並將小數部分作爲小數部分,那將是非常好的。我想我不能依靠JSON.parseFull(),我需要編寫一些額外的代碼才能得到我想要的。 – Max

+0

不一定。如果浮點數始終有一個點,則可以編寫一個轉換函數,該函數返回「100.0」的浮點數和返回「100」的Int的值。 –

+0

Scala的JSON文檔鏈接未找到。 – Alaeddine

3

NUMERICS的缺省轉換在雙

基本上你需要設置默認號碼分析器globalNumberParserint第一

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 
相關問題