我正在尝试在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)
答案 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对其进行解析。