4

我和 Argonaut 有很大的关系。我需要收集 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 (- _)
  )

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

4

1 回答 1

4

如果您添加 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)
于 2019-04-26T22:09:10.337 回答