首页 > 解决方案 > Scala Play - Json 解析

问题描述


我从外部服务接收 JSON,我的目标是完全按原样解析它。
主要问题是:一个值可以为空,也可以不存在,但null不存在的含义不同。所以我想以某种方式抓住这个。
例如这个 JSON:

{
  "a": null,
  "b": 1
}

与此不同:

{
  "b": 1
}

你能帮我吗?

更新:
很抱歉更新延迟。无论如何:你是对的,我在中间有一个隐式的自定义读取,目前我使用"a".readNullable[Double]and"a".write[Option[Double]]和 case 类是这样的:

case class Example(a: Option[Double])

标签: jsonscalaparsingplayframeworknull

解决方案


只是通过一个详细的示例(play-json 2.6)来说明@mfirry 所说的内容:

scala> import play.api.libs.json._
import play.api.libs.json._

scala> val json1 = Json.parse("""{"a": null, "b": 1}""")
json1: play.api.libs.json.JsValue = {"a":null,"b":1}

scala> val json2 = Json.parse("""{"b": 1}""")
json2: play.api.libs.json.JsValue = {"b":1}

scala> (json1 \ "a").isDefined
res8: Boolean = true

scala> (json1 \ "a") == JsDefined(JsNull)
res3: Boolean = true

scala> (json2 \ "a").isDefined
res7: Boolean = false

scala> (json2 \ "a")
res5: play.api.libs.json.JsLookupResult = JsUndefined('a' is undefined on object: {"b":1})

推荐阅读