Сбор элементов в массиве JSON

У меня большие мучения с Аргонавтом. Мне нужно собрать все элементы в массиве 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 (- _)
  )

Но я не уверен, как получить значения. Пожалуйста, мне нужен совет здесь.


person Mojo    schedule 26.04.2019    source источник


Ответы (1)


Если вы добавите аргонавт-монокль, вы можете легко сделать это следующим образом:

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)
person M.K.    schedule 26.04.2019