Scala foreach成员变量

Scala foreach成员变量,scala,playframework,playframework-2.0,case-class,Scala,Playframework,Playframework 2.0,Case Class,是否有方法为类的每个成员变量循环?列表和数组很简单,但我必须构造一个case类,每个json字段映射到一个成员变量,才能使用Play框架的Reads/validator API。您的意思是: case class SomeClass(a: Int, b: Int) SomeClass(1,2).productIterator.foreach{ a => println(a)} 这将为您提供以下输出:1 2 或者,如果您试图从json构造对象。您可以在case类中定义读取,该类将json反

是否有方法为类的每个成员变量循环?列表和数组很简单,但我必须构造一个case类,每个json字段映射到一个成员变量,才能使用Play框架的Reads/validator API。您的意思是:

case class SomeClass(a: Int, b: Int)
SomeClass(1,2).productIterator.foreach{ a => println(a)}
这将为您提供以下输出:1 2

或者,如果您试图从json构造对象。您可以在case类中定义读取,该类将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
将所有字段作为一个集合返回。您可以对上一个和当前字段集使用
diff
,以获取更改的字段。这是一个快速的解决方案,没有任何特定的类别。

您能澄清一下吗?你的意思是迭代类实例中的每个属性吗?是的,这就是我的意思,从你的问题我感觉你做错了什么。你能用一个例子详细说明你到底想做什么吗?我想定期从一个uri获取并将返回的json的每个字段与前面的值进行比较,如果字段发生了更改,则记录一条消息。我使用Play框架来验证json并将其转换为classIt,这取决于您将“返回的json”封装为什么-是自定义类吗?地图?JSON库对象?谢谢,我已经转换成类对象了。productIterator部分正是我所需要的。