首页 > 解决方案 > 使用 circe 时如何在 Scala 中表示动态 JSON 键

问题描述

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

     {
       "cars": {
          "THIS IS A DYNAMIC KEY 1": {
            "name": "bla 1",
          },
          "THIS IS A DYNAMIC KEY 2": {
            "name": "bla 2",
          }
          ...
      }

但是,我的 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)

标签: scalacirce

解决方案


我认为你可以只使用一个Map[String, CarDetails]. 然后您的 ADT 变为:

import io.circe.generic.JsonCodec

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

@JsonCodec
case class CarDetails(name: String)

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


推荐阅读