Scala foreach 成员变量

Scala foreach member variable

有没有办法对class的每个成员变量进行循环?这对于列表和数组来说很简单,但我必须构建一个案例 class,每个 json 字段映射到一个成员变量,以使用 Play 框架的 Reads/validator API

你的意思是这样的吗:

case class SomeClass(a: Int, b: Int)
SomeClass(1,2).productIterator.foreach{ a => println(a)}

这将为您提供以下输出:1 2

或者,如果您尝试从 json 构建对象。您可以在您的案例 class 中定义读取,它将 json 反序列化为您的对象:

override def reads(json: JsValue): JsResult[SomeClass] = JsSuccess(SomeClass(
    (json \ "a").as[Int],
    (json \ "b").as[Int]
  )
  )

然后使用反序列化:

val json = Json.obj() //Your json
json.validate[SomeClass]

json.fold(
  errors => {
    Json.obj("status" -> "Not OK", "message" -> JsError.toJson(errors))
  },
  preset => {
    Json.obj("status" -> "OK")
  }
)

如果您想比较 Json 并获得差异,使用 JsObject 方法可能更好?

例如fieldSetreturn所有字段作为一个集合。您可以在以前和当前的字段集上使用 diff 来获取更改的字段。这是快速解决方案,没有任何具体 类.