将列表转换为 Json
Convert List to Json
如何创建如下所示的 Json (Circe):
{
"items": [{
"field1": "somevalue",
"field2": "somevalue2"
},
{
"field1": "abc",
"field2": "123abc"
}]
}
val result = Json.fromFields(List("items" -> ???))
您可以使用 Circe 的内置列表类型classes 进行编码 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
)
)
}
}
如果我们实例化一个“编码”class 并调用 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"
}
]
}
如何创建如下所示的 Json (Circe):
{
"items": [{
"field1": "somevalue",
"field2": "somevalue2"
},
{
"field1": "abc",
"field2": "123abc"
}]
}
val result = Json.fromFields(List("items" -> ???))
您可以使用 Circe 的内置列表类型classes 进行编码 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
)
)
}
}
如果我们实例化一个“编码”class 并调用 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"
}
]
}