2016-02-03 3 views
1

Есть ли способ цикла для каждой переменной-члена класса? Это тривиальный со списками и массивами, но я должен построить корпус класса с каждым отображением JSON поля для переменной-члена использовать рамки Play читает/валидатор APIScala foreach member переменная

+0

Не могли бы вы уточнить? Вы имеете в виду итерацию по каждому свойству в экземпляре класса? – 7zark7

+0

yup, вот что я имею в виду – kliew

+0

С вашего вопроса у меня такое чувство, что вы делаете что-то не так. Можете ли вы рассказать о том, что именно вы пытаетесь сделать, например, с примером? –

ответ

2

вы имели в виду что-то вроде этого:

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

это даст вам результат: 1 2

Или если вы пытаетесь построить объект из json. Вы можете определить читает в вашем случае классе, который deserialises 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") 
    } 
) 
+0

Спасибо, я уже сделал преобразование в объект класса. Часть продукта - это то, что мне нужно. – kliew

1

Если вы хотите сравнить Json и получить разницу, может быть лучше использовать JsObject методов ?

Например, fieldSet вернуть все поля в качестве комплекта. Вы можете использовать diff в предыдущем и текущем поле, чтобы получить измененные поля. Это быстрое решение и никаких конкретных классов.