收集JSON数组中的元素

时间:2019-04-26 19:14:41

标签: json scala argonaut

我和Argonaut有很大的麻烦。我需要收集JSON数组中的所有元素。例如,我将这些数据保存在JSON中。

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

然后,我需要将所有name值收集到List中。所以我得到了

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 (- _)
  )

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

1 个答案:

答案 0 :(得分:3)

如果您添加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)