解析`NaN` Json.parse配置

问题描述 投票:1回答:1

我试图使用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}; 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)

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

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

json scala playframework play-json
1个回答
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解析它。

© www.soinside.com 2019 - 2024. All rights reserved.