Ответ 1
Играть! дает вам множество способов работы с Json. Из внешнего вида вашего кода вы идете по дороге Tuple. Что по существу позволяет конвертировать Json в Tuple. Вы также используете "чтения", который имеет недостаток, что вы не получаете точных отчетов об ошибках (т.е. Если недопустимый json был передан, вы знали бы его недопустимый... но вы не обязательно знаете, почему он был недействителен). Если вам нужна дополнительная обработка ошибок, вам нужно начать использовать метод проверки (подробности здесь: http://www.playframework.com/documentation/2.1.1/ScalaJsonCombinators).
Еще один способ, которым вы могли бы пойти, - сопоставить классы Json с case, которые делают что-то вроде:
import play.api.libs.json._
case class MyClass(
suggestion: String,
categories: String
)
object MyClass {
implicit val readsMyClass: Reads[MyClass] = new Reads[MyClass] {
def reads(json: JsValue): JsResult[MyClass] = {
for {
suggestion <- (json \ "suggestion").validate[String]
categories <- (json \ "categories").validate[String]
} yield MyClass(json,categories)
}
}
}
Это похоже на много кода, поэтому Play 2.1 представил Json 'Inception', который мне еще предстоит попробовать (http://www.playframework.com/documentation/2.1.1/ScalaJsonInception).
Наконец, если вам нужна проверка Json, но нет необходимости в сортировке/распаковке классов case, вы можете попробовать метод "береговое побережье". Это сохранит все ваши json как типы JsObject, но все равно даст вам подтверждение. Пример кода здесь: https://github.com/mandubian/play2-json-demo/blob/master/json-coast-to-coast/app/controllers/Application.scala
Надеюсь, что это поможет.