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

如何检查JsValue是null还是空[Scala,Play],scala,play-json,Scala,Play Json,我试图编写一个简单的实用程序来检查JsValue是null还是空的。我有这个: def is_nullOrEmpty(x: JsValue): JsBoolean = { JsBoolean( (x) match { case _ => x == null case _ => x.toString().isEmpty } ) } 我对Scala+游戏相当陌生,我不确定这是否是正确的方法 或者: def is_nullOrEmpty

我试图编写一个简单的实用程序来检查
JsValue
null
还是空的。我有这个:

def is_nullOrEmpty(x: JsValue): JsBoolean = {
  JsBoolean(
    (x) match {
      case _ => x == null
      case _ => x.toString().isEmpty  
    }
  )
}
我对Scala+游戏相当陌生,我不确定这是否是正确的方法

或者:

def is_nullOrEmpty(x: JsValue) = x == null || x.toString().trim.isEmpty
其中我还包括
.trim


你能帮忙吗?

我不明白-为什么名为
is\u nullOrEmpty
is
JsBoolean
的方法的输出?你是说
布尔值

def isNullOrEmpty(x:JsValue):布尔值=x匹配{
大小写null=>true
case JsNull=>true
大小写=>false
}
如果您还想检查
字符串
数组
的空值,那么

def isNullOrEmpty(x:JsValue):布尔值=x匹配{
大小写null=>true
case JsNull=>true
大小写JsString(string)=>string.trim.isEmpty
case JsArray(array)=>array.isEmpty
大小写=>false
}
或者,如果要将其转换为
JsBoolean
,如果它不是兼容的值,则返回
null

def convertToJsBoolean(x:JsValue):JsBoolean=x匹配{
案例jsBoolean:jsBoolean=>jsBoolean
大小写=>null
}
在这种情况下,还可以使用
选项[JsBoolean]
作为输出类型

def convertToJsBoolean(x:JsValue):选项[JsBoolean]=x匹配{
案例jsBoolean:jsBoolean=>Option(jsBoolean)
案例=>无
}

我不明白-为什么名为
的方法的输出为is_nullOrEmpty
is
JsBoolean
?你是说
布尔值

def isNullOrEmpty(x:JsValue):布尔值=x匹配{
大小写null=>true
case JsNull=>true
大小写=>false
}
如果您还想检查
字符串
数组
的空值,那么

def isNullOrEmpty(x:JsValue):布尔值=x匹配{
大小写null=>true
case JsNull=>true
大小写JsString(string)=>string.trim.isEmpty
case JsArray(array)=>array.isEmpty
大小写=>false
}
或者,如果要将其转换为
JsBoolean
,如果它不是兼容的值,则返回
null

def convertToJsBoolean(x:JsValue):JsBoolean=x匹配{
案例jsBoolean:jsBoolean=>jsBoolean
大小写=>null
}
在这种情况下,还可以使用
选项[JsBoolean]
作为输出类型

def convertToJsBoolean(x:JsValue):选项[JsBoolean]=x匹配{
案例jsBoolean:jsBoolean=>Option(jsBoolean)
案例=>无
}

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

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(_) != ""))
话虽如此,空字符串的检查是多余的,正如在许多其他文章中详细阐述的那样


代码运行于。

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

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(_) != ""))
话虽如此,空字符串的检查是多余的,正如在许多其他文章中详细阐述的那样



代码在运行。

我不明白-为什么名为的方法的输出是空的JsBoolean?你是说
Boolean
?我不明白-为什么名为
is_nullOrEmpty
is
JsBoolean
的方法的输出?你是说
Boolean
null
永远不应该作为
JsValue
传递。。。永远不要
can
can
总是与
should
不一致。如果您打算使用null,请使用Java lib。您是认真的吗?只需计算一下scala标准库、cats、zio、circe和许多其他scala库的源代码中的空用法。然后你可以告诉所有这些lib的作者改用javalibs。你能阻止你的方法的用户只使用Scala生态系统传递
null
参数吗?特别是当需求明确标识
null
时,这意味着用例构成了
null
值的极大可能性。
null
永远不应作为
JsValue
传递。。。永远不要
can
can
总是与
should
不一致。如果您打算使用null,请使用Java lib。您是认真的吗?只需计算一下scala标准库、cats、zio、circe和许多其他scala库的源代码中的空用法。然后你可以告诉所有这些lib的作者改用javalibs。你能阻止你的方法的用户只使用Scala生态系统传递
null
参数吗?特别是当需求明确标识
null
时,这意味着用例很可能存在
null
值。感谢您的帮助,我已将其设置为可接受的答案。在这方面我有一个问题。如果我使用以下命令:
def is_nullOrEmpty(x:JsValue):JsBoolean={x match{case JsString(value)=>JsBoolean(value.isEmpty)case JsNull=>JsTrue case JsArray(value)=>JsBoolean(value.isEmpty)}
验证空字符串时会失败,但我仍然不确定原因。你能给我一些见解吗?@paranza当字符串不为空时,你需要使用
case-JsString(value)=>JsBoolean(value.nonEmpty)
来获得
JsTrue
。当前,您检查字符串是否为空,是否为空,然后得到true。这不是你想要的。谢谢,谢谢。我想这个想法和JsArray的类似,对吧?我想是的……谢谢你的帮助,我已经把它设定为公认的答案。在这方面我有一个问题。如果我使用以下命令:
def is_nullOrEmpty(x:JsValue):JsBoolean={x match{case JsString(value)=>JsBoolean(value.isEmpty)case JsNull=>JsTrue case JsArray(value)=>JsBoolean(value.isEmpty)}
验证空字符串时会失败,但我仍然不确定原因。“你能给我一些见解吗?”帕兰扎说