如何检查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
isJsBoolean
的方法的输出?你是说布尔值
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
isJsBoolean
?你是说布尔值
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
isJsBoolean
的方法的输出?你是说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)}
验证空字符串时会失败,但我仍然不确定原因。“你能给我一些见解吗?”帕兰扎说