Scala 和 json4s:如何过滤 json 数组

Scala & json4s: How do I filter a json array

数组示例:

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

我想过滤掉名称不以 Jo:

开头的对象
[
  {
    "name": "John"
  },
  {
    "name": "Joseph"
  }
]

结果可能是一个 String 或 JValue,其中包含 json 数组。

我无法在 json4s 中找到直接的 JSON 查询机制,因此创建了一个案例 class。 映射 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)