Я пишу интерфейс RESTful, и я хотел бы маршалировать и демаршаллировать JSON, готовый для Ember Data. Проблема в том, что Ember Data хочет имя объекта, а две библиотеки, которые я пробовал, spray-json и json4s, похоже, не справляются с этим легко.
Желаемый формат Ember Data
{
"coursePhoto": {
"photoId": 1
}
}
Текущий формат по умолчанию:
{"photoId":15}
Это должно происходить из класса case:
case class CoursePhoto(photoId: Long)
Я запустил его со следующим пользовательским кодом:
object PtolemyJsonProtocol extends DefaultJsonProtocol {
implicit object CoursePhotoFormat extends RootJsonFormat[CoursePhoto] {
def write(cp: CoursePhoto) =
JsObject("CoursePhoto" -> JsObject("photoId" -> JsNumber(cp.photoId)))
def read(value: JsValue) = value match {
case coursePhotoJsObject: JsObject => {
CoursePhoto(coursePhotoJsObject.getFields("CoursePhoto")(0).asJsObject
.getFields("photos")(0).asInstanceOf[JsArray].elements(0)
.asInstanceOf[JsNumber].value.toLong)
}
case _ => deserializationError("CoursePhoto expected")
}
}
Этот код кажется ужасающе хрупким и уродливым со всеми asInstanceOf
и (0)
.
Учитывая, что я пишу в Spray с помощью Scala, какой хороший способ получить именованный корневой вывод JSON? Я вполне счастлив сделать это с любой библиотекой JSON, которая хорошо интегрируется со Spray и достаточно производительна.