使用json4s时如何设置Jackson解析器功能?

时间:2016-08-24 21:36:27

标签: scala jackson json4s

尝试使用json4s解析JSON时收到以下错误:

Non-standard token 'NaN': enable JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS to allow

如何启用此功能?

3 个答案:

答案 0 :(得分:0)

假设您的ObjectMapper对象名为mapper

val mapper = new ObjectMapper()
// Configure NaN here
mapper.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true)

...

val json = ... //Get your json
val imported = mapper.readValue(json, classOf[Thing])  // Thing being whatever class you're importing to.

答案 1 :(得分:0)

@Nathaniel Ford,谢谢你让我走上了正确的道路!

我最后查看了parse()方法的源代码(这是我本来应该做的)。这有效:

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.ObjectMapper
import org.json4s._
import org.json4s.jackson.Json4sScalaModule

val jsonString = """{"price": NaN}"""

val mapper = new ObjectMapper()
// Configure NaN here
mapper.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true)
mapper.registerModule(new Json4sScalaModule)

val json = mapper.readValue(jsonString, classOf[JValue])

答案 2 :(得分:0)

虽然上面的答案仍然正确,但应该修改的是,因为 Jackson 2.10 JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS 已被弃用。

配置正确 NaN 处理的可持续方法如下:

val mapper = JsonMapper.builder().enable(JsonReadFeature.ALLOW_NON_NUMERIC_NUMBERS).build();
// now your parsing