解析`NaN` Json.parse配置

时间:2019-04-11 02:42:04

标签: json scala playframework play-json

我正在尝试在Scala中使用play-json使用NaN解析JSON对象。

import play.api.libs.json._
val s = """{"a": NaN}"""
val p = Json.parse(s)

此错误

  

com.fasterxml.jackson.core.JsonParseException:非标准令牌   'NaN':启用JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS以允许   在[来源:{“ a”:NaN};行:1,列:10]
  com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702)   com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:558)   com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1884)   com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:749)   play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:179)   play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:128)   play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:123)   com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3786)   com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2115)   play.api.libs.json.jackson.JacksonJson $ .parseJsValue(JacksonJson.scala:235)   play.api.libs.json.StaticBinding $ .parseJsValue(StaticBinding.scala:16)   play.api.libs.json.Json $ .parse(Json.scala:171)

问题:我不确定应该在哪里启用配置以允许非标准解析。

(scala 2.11,com.typesafe.play:play-json_2.11:2.6.9)

1 个答案:

答案 0 :(得分:1)

您有2个选择:

1)为您启用ALLOW_NON_NUMERIC_NUMBERS杰克逊映射器-通过play-json看起来像not supported,但是如果您“手动”解析json,则可以像这样控制它:

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)修改json并将所有NaN子字符串转换为null。然后使用play-json对其进行解析。