I am trying to parse a JSON object with a NaN
using play-json in Scala.
import play.api.libs.json._
val s = """{"a": NaN}"""
val p = Json.parse(s)
This errors with
com.fasterxml.jackson.core.JsonParseException: Non-standard token 'NaN': enable JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS to allow at [Source: {"a": NaN}; line: 1, column: 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)
Question: I am not sure where should I enable the configuration to allow non-standard parsing.
(scala 2.11, com.typesafe.play:play-json_2.11:2.6.9)
You have 2 choices:
1) Enable the ALLOW_NON_NUMERIC_NUMBERS
for you jackson mapper - looks like it's not supported through play-json, but if you parse the json "manually", you can control it, like that:
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) Modifying the json and convert all NaN
substrings to null. Then parse it with play-json.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With