json - 解析 `NaN` Json.parse 配置
问题描述
我正在尝试NaN
使用 Scala 中的 play-json 解析 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 以允许在 [Source: {"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) 播放。 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)
解决方案
您有 2 个选择:
1)为你启用ALLOW_NON_NUMERIC_NUMBERS
杰克逊映射器 - 看起来它不支持通过play-json,但如果你“手动”解析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 解析它。
推荐阅读
- azure-devops - 无法从存储库中删除 azure 组
- sql-server - 取消嵌套 SQL Server 2014 中的字段
- powershell - 尝试从 Powershell 模块调用 Http.Request 时,我得到 Method not found: 'FSharp.Data.HttpResponse FSharp.Data.Http.Request...'
- javascript - 使用 JavaScript 获取每个的值
- python - 将一条线上的所有点投影到另一条线上
- javascript - 从另一个日期减去一个日期的结果类型是什么?
- asp.net-core - 如何在 ASP.NET CORE 3.1 中重定向过滤器
- http - 在 Dart 中发出 HTTP GET 请求时出现 TypeError
- perl - 如何一次读取 10 个文件名,处理它们,然后读取下一个 10?
- r - 如何使用 R stringr 只留下基因名称?