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
方法可能更好?
例如fieldSet
return所有字段作为一个集合。您可以在以前和当前的字段集上使用 diff
来获取更改的字段。这是快速解决方案,没有任何具体 类.
有没有办法对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
方法可能更好?
例如fieldSet
return所有字段作为一个集合。您可以在以前和当前的字段集上使用 diff
来获取更改的字段。这是快速解决方案,没有任何具体 类.