【问题标题】:how to parse un Array of object with Circe如何用 Circe 解析对象数组
【发布时间】:2018-05-05 03:19:39
【问题描述】:

我有一个json

{ "field" : [ { "value" : 1.0 }, { "value" : 2.0 } ] }

如何获得值为 List(1.0, 2.0) 的List[String]

【问题讨论】:

    标签: scala circe


    【解决方案1】:

    我个人会这样做:

    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)
    

    【讨论】:

      【解决方案2】:

      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)
      

      【讨论】:

        猜你喜欢
        • 2021-06-09
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 2021-11-11
        • 2019-12-01
        • 2019-01-14
        • 2022-11-17
        • 1970-01-01
        相关资源
        最近更新 更多