目前我有两个类,如何将它们转换为代数数据类型?我想我可以做类似case class BlacklistDynamoDBUpdate(ruleName: String, whitelistedAccount, featureName: String)
的事情,但是如何在该类中使用这些方法?
class DynamoDBUpdateBlacklist {
private var features: Array[BlacklistDynamoDBUpdate] = _
def getFeatures = features
def setFeatures(features: Array[BlacklistDynamoDBUpdate]) = {
this.features = features
}
}
class BlacklistDynamoDBUpdate {
private var ruleName: String = _
private var whitelistedAccount: String = _
private var featureName: String = _
def getFeatureName: String = featureName
def setFeatureName(featureName: String) = {
this.featureName = featureName
}
def getRuleName: String = ruleName
def setRuleName(ruleName: String) = {
this.ruleName = ruleName
}
def getWhitelistedAccounts: String = whitelistedAccount
def setWhitelistedAccounts(whitelistedAccount: String): Unit = {
this.whitelistedAccount = whitelistedAccount
}
}
我将json转移到scala对象中,json看起来像这样
"features": [ { "featureName": "***", "ruleName": "***", "whitelistedAccounts": "***" }],
我想要的是获取那些属性值
[如果您需要将json解析为惯用的scala代码,请使用简单的案例类和库,该案例和库旨在将此类json直接解析为这些案例类(我个人认为这是https://lihaoyi.com/upickle或这https://circe.github.io/circe)。
这里是示例代码,显示了如何使用upickle。
import upickle.default.{ReadWriter => RW, macroRW}
case class DynamoDBUpdateBlacklist(features:Seq[BlacklistDynamoDBUpdate])
case class BlacklistDynamoDBUpdate(featureName:String, ruleName:String, whitelistedAccounts:String)
object DynamoDBUpdateBlacklist {
implicit val rw: RW[DynamoDBUpdateBlacklist] = macroRW
}
object BlacklistDynamoDBUpdate {
implicit val rw: RW[BlacklistDynamoDBUpdate] = macroRW
}
//use it like that
import upickle.default._
println(
read[DynamoDBUpdateBlacklist]("""
{"features":[{ "featureName": "***", "ruleName": "***", "whitelistedAccounts": "***" }]}
""")
)
//DynamoDBUpdateBlacklist(Vector(BlacklistDynamoDBUpdate(***,***,***)))