Questa domanda può sentire l'odore stupido, ma voglio davvero sapere come controllare un NULL JsValue in Play 2:In Play 2 come verificare se una variabile JsValue è NULL?
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)
Si può vedere il valore della variabile a
è null
ma il controllo ==
ritorna con false
. Tuttavia le opere di seguito come previsto:
scala> val b: JsValue = null
b: play.api.libs.json.JsValue = null
scala> b == null
res3: Boolean = true
E quando mi rivolsi a tipo di conversione con asOpt
, sembra funzionare ancora:
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
Funziona davvero? Ricevo il seguente avviso durante la compilazione durante il test se 'myJsValue.isInstanceOf [JsUndefined]': 'test di tipo infruttuoso: un valore di tipo play.api.libs.json.JsValue non può anche essere un play.api.libs.json.JsUndefined ' – Blackbird
Non funziona. 'val jsValue: JsValue = JsNull; Logger.info ("jsValue.isInstanceOf [JsUndefined]:" + jsValue.isInstanceOf [JsUndefined]) '-> visualizza' false' – Blackbird
@Blackbird Questo perché null! = Undefined. – bjfletcher