如何在使用circe时在Scala中表示动态JSON密钥

Ror*_*ory 2 scala circe

我试图将以下JSON表示为Scala案例类:

     {
       "cars": {
          "THIS IS A DYNAMIC KEY 1": {
            "name": "bla 1",
          },
          "THIS IS A DYNAMIC KEY 2": {
            "name": "bla 2",
          }
          ...
      }
Run Code Online (Sandbox Code Playgroud)

但是,我的JSON有动态密钥,我在运行时不会知道,我想使用circe来编码/解码.我正在使用正确的方法来使用Scala表示这个?

import io.circe.generic.JsonCodec

@JsonCodec
case class Cars(cars: List[Car])

@JsonCodec
case class Car(whatShouldThisBe: CarDetails) // Not sure how to represent this?

@JsonCodec
case class CarDetails(name: String)
Run Code Online (Sandbox Code Playgroud)

Mar*_*gel 5

我想你可以用一个Map[String, CarDetails].你的ADT然后变成:

import io.circe.generic.JsonCodec

@JsonCodec
case class Cars(cars: Map[String, CarDetails])

@JsonCodec
case class CarDetails(name: String)
Run Code Online (Sandbox Code Playgroud)

唯一棘手的问题可能是,如果您需要至少有一个CarDetails对象,或者零是可接受的.如果需要,Circe似乎确实支持cats.data.NonEmptyMap.