如何检查 JsValue 是 null 还是 Empty [Scala, Play]

How to check whether a JsValue is null or Empty [Scala, Play]

我正在尝试编写一个简单的实用程序来检查 JsValuenull 还是空的。我有这个:

def is_nullOrEmpty(x: JsValue): JsBoolean = {
  JsBoolean(
    (x) match {
      case _ => x == null
      case _ => x.toString().isEmpty  
    }
  )
}

我对 Scala + Play 还很陌生,我不确定这是否是正确的方法。

或者这个:

def is_nullOrEmpty(x: JsValue) = x == null || x.toString().trim.isEmpty

我这里也包括.trim

你能帮忙吗?

我不明白 - 为什么名为 is_nullOrEmpty 的方法的输出是 JsBoolean ?您是说 Boolean 吗?

def isNullOrEmpty(x: JsValue): Boolean = x match {
  case null => true
  case JsNull => true
  case _ => false
}

如果您还想检查 StringArray 是否为您的 JsValue,那么,

def isNullOrEmpty(x: JsValue): Boolean = x match {
  case null => true
  case JsNull => true
  case JsString(string) => string.trim.isEmpty
  case JsArray(array) => array.isEmpty
  case _ => false
}

或者,如果您想将其转换为 JsBoolean 和 return null 如果它不是兼容值,

def convertToJsBoolean(x: JsValue): JsBoolean = x match {
  case jsBoolean: JsBoolean => jsBoolean
  case _ => null
}

在这种情况下,您还可以使用 Option[JsBoolean] 作为您的输出类型,

def convertToJsBoolean(x: JsValue): Option[JsBoolean] = x match {
  case jsBoolean: JsBoolean => Option(jsBoolean)
  case _ => None
}

您可以使用 Option。请尝试以下操作:

def is_nullOrEmpty(x: JsValue): JsBoolean = Option(x) match {
  case None =>
    JsFalse
  case Some(value) =>
    if (Json.stringify(value) == "") {
      JsFalse
    } else {
      JsTrue
    }
}

或者在一个班轮中更容易:

def is_nullOrEmpty1(x: JsValue): JsBoolean = JsBoolean(Option(x).exists(Json.stringify(_) != ""))

话虽如此,空字符串的检查是多余的,如 和许多其他帖子中所述。

代码 运行 在 Scastie