Ответ 1
Предисловия
Позвольте мне дать другое решение, которое не полагается на какую-либо библиотеку на основе Java, а только на чистый Scala.
Собственно, как обсуждалось в комментариях результатов @Steve Play 2 Scala версия использовала Jerkson для сериализации Json для модели домена. Где Джеркссон является оберткой DSL вокруг очень хорошей библиотеки Java для обработки Json.
Ответ
Вышеизложенное не отвечало на ваш вопрос, так как вы спрашивали, было ли предусмотрено использование отражения и макрофункции Scala 2.10, чтобы облегчить эту задачу!!!! Исключая большинство шаблонов.
И это была очень хорошая мысль на самом деле, потому что из версии Play 2.1 API Json Scala больше не использует Джеркссона, но имеет собственный механизм.
Этот механизм фактически использует преимущества этой новой версии 2.10 Scala, введя совершенно новый API, основанный на двух вещах:
- функциональная конструкция (Applicative Builder), адаптированная для чтения и записи экземпляров Json или Domain. Эти конструкторы используются для склеивания всех комбинаторов (для чтения или записи), чтобы определить грубые гранулированные структурированные (например, с комбинаторами Parser).
- куча макросов, которые могут обнаружить, какие комбинаторы неявно доступны, и построят сложные для классов классов (или, по крайней мере, типов, которые имеют методы
apply
иunapply
).
В конце дня, вот что мы можем сделать, используя этот API:
import play.api.libs.json._
import play.api.libs.functional.syntax._
case class Person(name: String, age: Int, lovesChocolate: Boolean)
implicit val personReads = Json.format[Person] //a format is a Reader and a Writer
//this format will be implicitly used by the following from/toJson functions
val person:JsResult[Person] = Json.fromJson(json) //JsResult is like JsSucces/JsError
val jsObject = Json.toJson(person)
код скопирован и адаптирован из: JSON Inception (на основе Scala 2.10 макросов)
Небольшое примечание: новый API даже достаточно умен, чтобы иметь возможность проверять "чтение" путем накопления ошибок...
Ссылки
Существует ряд блогов от @mandubian, которые я бы рекомендовал здесь, потому что они очень помогают в этом!
- Компоненты JsPath и чтения: http://mandubian.com/2012/09/08/unveiling-play-2-dot-1-json-api-part1-jspath-reads-combinators/
- Компиляторы Writes/Format: http://mandubian.com/2012/10/01/unveiling-play-2-dot-1-json-api-part2-writes-format-combinators/
- Трансформаторы JSON: http://mandubian.com/2012/10/29/unveiling-play-2-dot-1-json-api-part3-json-transformers/
- JSON Inception (на основе Scala 2.10 макросов): http://mandubian.com/2012/11/11/JSON-inception/
Заключительная записка
Печально то, что модуляция Play 2... не позволяет нам использовать этот API в одиночку! Таким образом, он должен использоваться из проигрывателя lib в целом:/ Это может измениться в будущем...
ИЗМЕНИТЬ
И будущее становится все ближе, так как Pascal имеет это repo, позволяющее нам использовать API-интерфейс play-json.
Таким образом, можно использовать это репо, пока не будет выпущено воспроизведение 2.2. В самом деле, эта версия будет полностью разделена на несколько API, таких как json или iteratees, и, таким образом, мы сможем напрямую использовать playframework repo.