Scala foreach成员变量
是否有方法为类的每个成员变量循环?列表和数组很简单,但我必须构造一个case类,每个json字段映射到一个成员变量,才能使用Play框架的Reads/validator API。您的意思是: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 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部分正是我所需要的。