【问题标题】:Parse `NaN` Json.parse configuration解析 `NaN` Json.parse 配置
【发布时间】:2019-04-11 02:42:04
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

  • Since Play doesn't support NaN,我会尽可能避免这种情况。您不应该在 Scala 或 Play 中使用或期待 NaN。
  • 这是我要解析的请求对象的一部分。

标签: json scala playframework play-json


【解决方案1】:

你有两个选择:

1) 为您的 jackson 映射器启用 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 解析。

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多