我有一个json,我将json解析为以下case类。我使用play json进行解析。以下是我的案例类
case class Result(id: String, account : Option[Seq[Account],data: Option[Seq[Data]]) case class Account(accountId: Option[String] = None) case class Data(primaryId: Option[String] = None, accountId: Option[String] = None)
从数据案例类中,我需要所有的primaryId作为Seq [String],以将数据案例类的accountId与Account案例类的accountId匹配。
以下是我尝试过的代码片段。我尝试了2种方式进行]
第一种方式
primaryIds = data.map(cd => for{ c <- cd if c.relatedAccountId == account.accountId }yield c.primaryId.get)))
第二种方式
primaryIds = data.map(_.collect { case s if s.relatedAccountId.equals(account.accountId) & s.primaryId.isDefined => s.primaryId.get
这是我的问题
使用s.primaryId.get是否正确。如果s.primaryId为None怎么办。而且None.get将引发异常。有没有更好的方法来解决这个问题。请让我知道
我有一个json,我将json解析为以下case类。我使用play json进行解析。以下是我的案例类案例类Result(id:字符串,account:选项[Seq [Account],data:Option [Seq [Data] ...
在.get
上使用Option[_]
几乎总是一个坏主意。此外,您可以通过第一种方式比较选项。这不是一个好主意,因为它可能会导致一些奇怪的结果(None
==None
=> true
)。
类似这样的方法应该起作用: