在 JSON 数组中收集元素

Collecting Elements in a JSON Array

我和阿尔戈英雄有很大的摩擦。我需要收集 JSON 数组中的所有元素。例如,我在 JSON.

中有此数据
val data = """{"id": 1, "items": [{"name": "foo","price": 10},{"name": "bar","price": 20}]}"""

然后我需要将所有 name 值收集到列表中。所以我得到这个

List("foo", "bar")

这意味着我需要遍历数组,所以我选择 Argonaut 库来执行此操作。但是很难知道 API 在 Argonaut 中是如何工作的。到目前为止我有这个,

val data = """{"id": 1, "items": [{"name": "foo","price": 10},{"name": "bar","price": 20}]}""".parseOption

data flatMap (k =>
  +k --\ "items" flatMap (_.downArray) map (- _)
  )

但我不确定如何获取值。请我在这里需要建议。

如果添加 argonaut-monocle,您可以按如下方式轻松完成此操作:

import argonaut._
import Argonaut._
import argonaut.JsonPath._

scala> val json: Option[Json] = """{"id": 1, "items": [{"name": "foo","price": 10},{"name": "bar","price": 20}]}""".parseOption
json: Option[argonaut.Json] = Some({"id":1,"items":[{"name":"foo","price":10},{"name":"bar","price":20}]})

scala> root.items.each.name.string.getAll(json.get)
res1: List[String] = List(foo, bar)