Scala播放-Json Parse

时间:2018-07-17 16:20:06

标签: json scala parsing playframework null


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

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

与此不同:

{
  "b": 1
}

能帮我吗?

更新:
抱歉,更新延迟。无论如何:没错,我在中间有一个隐式的自定义读取,目前我使用"a".readNullable[Double]"a".write[Option[Double]],case类类似于:

case class Example(a: Option[Double])

1 个答案:

答案 0 :(得分:1)

只需用一个详细的示例(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})