Сбор элементов в массиве JSON - PullRequest
3 голосов
/ 26 апреля 2019

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

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

1 Ответ

3 голосов
/ 27 апреля 2019

Если вы добавите 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)
...