我从外部服务接收到JSON,我的目标是完全解析它。
主要问题是:一个值可以为空,也可以不存在,但是null
的含义不同。所以我想以某种方式抓住它。
例如,以下JSON:
{
"a": null,
"b": 1
}
与此不同:
{
"b": 1
}
能帮我吗?
更新:
抱歉,更新延迟。无论如何:没错,我在中间有一个隐式的自定义读取,目前我使用"a".readNullable[Double]
和"a".write[Option[Double]]
,case类类似于:
case class Example(a: Option[Double])
答案 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})