如何用 Circe 解析 un 对象数组
how to parse un Array of object with Circe
我有一个json
{
"field" : [
{
"value" : 1.0
},
{
"value" : 2.0
}
]
}
如何获得值为 List(1.0, 2.0) 的 List[String]
?
我个人会这样做:
import io.circe.generic.auto._
import io.circe.parser.decode
case class ValueWrapper(value: Double)
case class Result(field: Seq[ValueWrapper])
decode[Result](jsonString).map(_.field.map(_.toString)).getOrElse(Seq.empty)
实际上,您可以在没有 Decoder
推导的情况下做到这一点。基本上这意味着您不使用 Circe 中最常用的部分,而是依赖 Circe optics。我猜它会是这样的(我还没有测试过!):
import io.circe.optics.JsonPath._
root.field.value.double.getAll(jsonString).map(_.toString)
Circe optics 是最简洁的方法。
import io.circe.optics.JsonPath._
import io.circe.parser._
val json = parse(jsonStr).right.get // TODO: handle parse errors
root.field.each.value.double.getAll(json) // == List(1.0, 2.0)
我有一个json
{
"field" : [
{
"value" : 1.0
},
{
"value" : 2.0
}
]
}
如何获得值为 List(1.0, 2.0) 的 List[String]
?
我个人会这样做:
import io.circe.generic.auto._
import io.circe.parser.decode
case class ValueWrapper(value: Double)
case class Result(field: Seq[ValueWrapper])
decode[Result](jsonString).map(_.field.map(_.toString)).getOrElse(Seq.empty)
实际上,您可以在没有 Decoder
推导的情况下做到这一点。基本上这意味着您不使用 Circe 中最常用的部分,而是依赖 Circe optics。我猜它会是这样的(我还没有测试过!):
import io.circe.optics.JsonPath._
root.field.value.double.getAll(jsonString).map(_.toString)
Circe optics 是最简洁的方法。
import io.circe.optics.JsonPath._
import io.circe.parser._
val json = parse(jsonStr).right.get // TODO: handle parse errors
root.field.each.value.double.getAll(json) // == List(1.0, 2.0)