Scala & json4s: как отфильтровать массив json - PullRequest
0 голосов
/ 24 апреля 2020

Пример массива:

[
  {
    "name": "John"
  },
  {
    "name": "Joseph"
  },
  {
    "name": "Peter"
  }
]

Я бы хотел отфильтровать объекты с именами, которые не начинаются с Jo:

[
  {
    "name": "John"
  },
  {
    "name": "Joseph"
  }
]

Результатом может быть строка или JValue с массивом json внутри.

1 Ответ

1 голос
/ 24 апреля 2020

Мне не удалось найти механизм прямого запроса JSON в json4s, поэтому я создал класс case. Mappd JSON -> отфильтровал его -> записал обратно в JSON

import org.json4s.jackson.JsonMethods.parse
import org.json4s.jackson.Serialization
import org.json4s.native.Serialization.write
import org.json4s.{Formats, ShortTypeHints}
object JsonFIlter {
  def main(args: Array[String]): Unit = {
    implicit val formats: AnyRef with Formats = Serialization.formats(ShortTypeHints(List(classOf[PersonInfo])))
    val parseJson :List[PersonInfo] = parse("""[
                                              |  {
                                              |    "name": "John"
                                              |  },
                                              |  {
                                              |    "name": "Joseph"
                                              |  },
                                              |  {
                                              |    "name": "Peter"
                                              |  }
                                              |]""".stripMargin)
      .extract[List[PersonInfo]]
    val output = write(parseJson.filter(p => p.name.startsWith("Jo")))
    println(output)

  }

}

case class PersonInfo(name: String)
...