首页 > 解决方案 > 如何使用圆形光学遍历具有多个字段的对象列表

问题描述

我正在寻找一种最优雅的方式来遍历具有 circe optics 的 Json 中具有多个字段的对象列表。

假设我们有这种 JSON:

[
  {
    "key1": "one",
    "key2": "two"
  },
  {
    "key1": "three",
    "key2": "four"
  }
]

我们有一个案例类case class Entity(key1: String, key2: String)

所以我想找到最优雅和最时尚的方式来遍历这个 JSON 并最终创建一个案例对象列表。

我知道我可以使用每个: root.each.key1.string.getAll(json),但是我将如何构建一个镜头,它会给我一个可遍历的元组(?)或者我可以理解的东西。我可能会以某种方式组合镜头。

已经有一个这样的问题(如何使用 Circe 解析对象数组),但每个对象中只有一个字段。

标签: scalacircecirce-optics

解决方案


最近我也在尝试解决一个非常相似的问题:我想用circe-json相当于以下jq行的东西来实现:

cat json | jq '.[] | {key1: .key1, key2: .key2}'

我得到的最接近的是:

import io.circe.optics.JsonPath.root

root.each.json.getAll(json)
  .map(j => (root.key1.string.getOption(j).get, root.key2.string.getOption(j).get))
  .map(Entity.apply)

推荐阅读