【问题标题】:Encode Map[String, MyCaseClass] into Seq[String, String] using circe使用 circe 将 Map[String, MyCaseClass] 编码为 Seq[String, String]
【发布时间】:2018-12-24 23:25:42
【问题描述】:

根据问题,如何使用 circe 将 Map[String, MyCaseClass] 编码为 Seq[String, String]?

型号:

case class MyCaseClass(name: String, enabled: Boolean)

case class Parent(parentName: String,
                  collection: Map[String, MyCaseClass])

Parent(
    "parent-name",
    Map(
        "external-name-a", MyCaseClass("internal-name-a", true),
        "external-name-b", MyCaseClass("internal-name-b", false)
    )
 )

我想把它编码成:

Seq[name = <map key>, enabled = <boolean value from MyCaseClass>]

例如:

    { ...
      collection: [
      {
        name: "external-name-a",
        enabled: true
      },
      {
        name: "external-name-a",
        enabled: false
      }
    ]
  ...
  }

我得到了以下,只是不确定如何做我想做的事

object Parent {

  implicit val encodeParent: Encoder[Parent] = (parent: Parent) => {
    Json.obj(
      ("name", parent.name.asJson),
      ("collection", parent.collection.asJson),
    )
  }

  implicit val encodeCollection: Encoder[Map[String, MyCaseClass]] = (collection: Map[String, MyCaseClass]) => {

    //collection.toList.map((externalName: String, myCaseClass: MyCaseClass) => (externalName, myCaseClass.enabled)).asJson
  }
}

【问题讨论】:

    标签: scala circe


    【解决方案1】:

    这行得通:

    implicit val encodeCollection: Encoder[Map[String, MyCaseClass]] = (collection: Map[String, MyCaseClass]) => {
    
        collection.toList.
          map(collection => (collection._1, collection._2.enabled)).
          map(collection => Json.obj(
            ("name", collection._1.asJson),
            ("enabled", collection._2.asJson)
          )).asJson
      }
    

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2020-10-28
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多