Как преобразовать класс в scala в алгебры c Типы данных? - PullRequest
1 голос
/ 25 февраля 2020

В настоящее время у меня есть два класса, как перенести их в Algebrai c Типы данных? Я думаю, что могу сделать что-то вроде этого 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": "***" }], 

что я хочу получить эти атрибуты значение

1 Ответ

3 голосов
/ 25 февраля 2020

Если вам нужно разобрать json в код идиоматического кода c scala, используйте простые классы дел и библиотеку, предназначенную для парсинга таких jsons непосредственно в эти классы дел (лично я рекомендую этот https://lihaoyi.com/upickle или этот https://circe.github.io/circe).

вот пример кода, который показывает, как использовать upickle.

import upickle.default.{ReadWriter => RW, macroRW}

final case class DynamoDBUpdateBlacklist(features:Seq[BlacklistDynamoDBUpdate])
final 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(***,***,***)))

https://scalafiddle.io/sf/8eqFEfX/2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...