json - 将列表转换为 Json
问题描述
如何创建一个如下所示的 Json (Circe):
{
"items": [{
"field1": "somevalue",
"field2": "somevalue2"
},
{
"field1": "abc",
"field2": "123abc"
}]
}
val result = Json.fromFields(List("items" -> ???))
解决方案
您可以使用 Circe 的内置列表类型类来对 JSON 进行编码。此代码将起作用:
import io.circe.{Encoder, Json}
import io.circe.syntax._
case class Field(field1: String, field2: String)
object Field {
implicit val encodeFoo: Encoder[Field] = new Encoder[Field] {
final def apply(a: Field): Json = Json.obj(
("field1", Json.fromString(a.field1)),
("field2", Json.fromString(a.field2))
)
}
}
class Encoding(items: List[Field]) {
def getJson: Json = {
Json.obj(
(
"items",
items.asJson
)
)
}
}
如果我们实例化一个“Encoding”类并调用 getJson,它将返回所需的 JSON。它之所以有效,是因为使用 circe 对列表进行编码所需要做的就是为列表中的任何内容提供一个编码器。因此,如果我们为 Field 提供编码器,当我们在其上调用 asJson 时,它将在列表中对其进行编码。
如果我们运行这个:
val items = new Encoding(List(Field("jf", "fj"), Field("jfl", "fjl")))
println(items.getJson)
我们得到:
{
"items" : [
{
"field1" : "jf",
"field2" : "fj"
},
{
"field1" : "jfl",
"field2" : "fjl"
}
]
}
推荐阅读
- angularjs - Angular 中的 Blazor 喜欢选择内容
- php - 如何显示在 TPL 变量中排序的 HTML DOM 元素
- c# - 使用对象类型存储一个int值时,为什么object.GetType()返回system.Int32?
- excel - VBA 中的函数如何修改参数的行号?
- ios - 未调用 UIMenuBuilder(催化剂)
- android - 带有屏幕锁定功能的 Android 手机上的 Firebase 通知
- sql - 如何在 Nodejs 中连接 Postgres 模式并使用 Sequelize 动态切换模式?
- java - Java Spring,getMapping返回文件夹的文件
- internet-explorer - 如何在 IE 11 上访问相机(视频)?
- python-2.7 - pyspark 读取 jdbc 以获取 DB2 表的下限值和上限值