Я пытаюсь использовать Spray-JSON для маршалинга входящего JSON с более чем 22 полями.Поскольку метода JsonFormat23 () нет, мне приходится вкладывать свои классы case, чтобы обойти ограничение.Однако входящий JSON не знает о вложенной структуре.
Есть ли способ избежать использования вложенной структуры в Spray Json?
EDIT
Вот мое решение, чтобы другие не испытывали такой же боли.Одной из моих проблем было то, что все мои поля были необязательными, что добавило еще один уровень сложности.В этом решении вы можете указать столько полей, сколько хотите
implicit object myFormat extends RootJsonFormat[myFormat] {
override def write(js : myFormat):JsValue =
JsObject(
List(
Some("language" -> js.language.toJson),
Some("author" -> js.author.toJson),
....
).flatten: _*
)
override def read(json: JsValue):myFormat= {
val fieldNames = Array("language", ... , "author")
val jsObject = json.asJsObject
jsObject.getFields(fieldNames:_*)
// code to transform fields to case class
// Initializes class with list of parameters
myFormat.getClass.getMethods.find(x => x.getName == "apply" && x.isBridge)
.get.invoke(myFormat, mylist map (_.asInstanceOf[AnyRef]): _*).asInstanceOf[myFormat]
}
}