XuC*_*LIU 8 json scala playframework
这个问题可能闻起来很愚蠢,但我真的想知道如何检查Play 2中的NULL JsValue:
scala> import play.api.libs.json._
import play.api.libs.json._
scala> val json = Json.obj("a" -> true)
json: play.api.libs.json.JsObject = {"a":true}
scala> val a = json \ "nonExisting"
a: play.api.libs.json.JsValue = null
scala> a == null
res1: Boolean = false
scala> Option(a)
res2: Option[play.api.libs.json.JsValue] = Some(null)
Run Code Online (Sandbox Code Playgroud)
你可以看到变量的值a
是null
,但==
与检查的回报false
.但是,以下工作符合预期:
scala> val b: JsValue = null
b: play.api.libs.json.JsValue = null
scala> b == null
res3: Boolean = true
Run Code Online (Sandbox Code Playgroud)
当我转向使用类型转换时asOpt
,它似乎再次起作用:
scala> val c = json \ "a"
c: play.api.libs.json.JsValue = true
scala> c.asOpt[Boolean]
res4: Option[Boolean] = Some(true)
scala> a.asOpt[Boolean]
res5: Option[Boolean] = None
Run Code Online (Sandbox Code Playgroud)
检查与 的相等性play.api.libs.json.JsNull
:
if (a == JsNull) { ... }
Run Code Online (Sandbox Code Playgroud)
或者
a match {
case JsNull => ...
}
Run Code Online (Sandbox Code Playgroud)
如果您在 JavaScript 中尝试使用实际的 JSON 进行相同的操作,通常您会得到undefined
not null
。这由JsUndefined
not表示JsNull
。你可以找这个代替:
a.isInstanceOf[JsUndefined]
Run Code Online (Sandbox Code Playgroud)
或通过使用模式匹配:
a match { case _: JsUndefined => true; case _ => false })
Run Code Online (Sandbox Code Playgroud)
Scala 的强类型准确反映了 JSON 行为,这有多酷!?:)
归档时间: |
|
查看次数: |
5726 次 |
最近记录: |