scala - 使用 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)
解决方案
我认为你可以只使用一个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
。
推荐阅读
- batch-file - 根据部分名称将文件移动到文件夹中,但不先创建文件夹
- android - Glide 无法将图像下载到 ImageView
- go - 将结构字段转换为字符串
- android - CryptographyManager 使用的 secretKeyName 是什么?
- c++ - 我不知道为什么它不打印链接列表
- vue.js - 从 vue.js 中的 slot 访问组件数据(没有在郊区声明模板)
- reactjs - 使用 ThreeJS 和 React 三纤执行 React 应用程序时出现“编译失败”错误
- python - python sort numpy ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
- vba - 使用 VBA 自动化 AutoCAD 中的数据
- database - 两个连续的mongodb文档字段之间的区别