从JSON字符串中提取可能的“null”值并放入元组以便稍后解压缩

时间:2017-03-16 22:57:04

标签: json scala

我在Scala中处理JSON字符串中可能的null值以及None操作的unzip值时遇到了几个问题。

我在JSON字符串中有字段,可以有值或null。我需要在Scala代码中处理这两个代码,所以我正在编写简单的if(null)检查。在Scala中有没有有效的方法?

def collectSecondId(value: SomeJsonObject) = {
  if(value.someField == null) {
    None
  } else {
    Some(value.someField.id)
  }

其次这些值将包含在一些元组列表中。如果我按上述方式返回,则可以None。如果返回None不是一个好主意,有没有办法返回None以外的其他方式。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Try重写您的方法:

def collectSecondId(value: SomeJsonObject) =
    Try(value.someField.id).toOption

如果value.someField为空,则您的尝试将导致失败,然后将显示为无。

答案 1 :(得分:0)

for {
  optValue <- Option(value) // Evaluates to None if value is null
  someField <- Option(optValue.somefield) // Evaluates to None if somefield is null
  id <- Option(someField.id) // Evaluates to None if id is null
} yield value 

如果任何值为null,则将导致None;如果它们全部定义,则将导致Some(id)。虽然 - 而不是手动执行此操作,但最好还是使用像Argonaut这样的JSON解析库。