Scala 播放Json序列化/反序列化相互递归

Scala 播放Json序列化/反序列化相互递归,scala,play-json,Scala,Play Json,如何使用Play Json组合器序列化和反序列化这些结构 final case class WriteGroupEntity(label: String, items: Map[String, WriteEntity]) final case class WriteEntity(label: String, propertyType: String, groups: Option[

如何使用Play Json组合器序列化和反序列化这些结构

final case class WriteGroupEntity(label: String, items: Map[String, WriteEntity])
final case class WriteEntity(label: String,
                             propertyType: String,
                             groups: Option[Map[String, WriteGroupEntity]])

两天过去了,我终于找到了解决办法

import play.api.libs.json._
import play.api.libs.functional.syntax._

final case class GroupEntity(label: String, items: Map[String, Entity])
final case class Entity(label: String,
                        propertyType: String,
                        groups: Option[Map[String, GroupEntity]])

implicit lazy val ge: OWrites[GroupEntity] = (
  (JsPath \ "label").write[String] and
    (JsPath \ "items").lazyWrite(Writes.map[Entity](e))
)(unlift(GroupEntity.unapply))

implicit val e: OWrites[Entity] = Json.writes[Entity]

implicit lazy val ger: Reads[GroupEntity] = (
  (JsPath \ "label").read[String] and
    (JsPath \ "items").lazyRead(Reads.map[Entity](er))
)(GroupEntity)

implicit val er = Json.reads[Entity]

请参考@ChaitanyaWaikar,我还没有找到这个。它已经3年了,所以没有配方:(你以前试过什么?@cchantep,我只能写手动ser/DESTER。这很好,但我正在开发中,这是不安全的。在
读取
写入
时,你无法跟踪错误。只是一个建议,你需要创建自己的
读取和写入
,以便更安全地验证。