首页 > 解决方案 > Scala & json4s:如何过滤 json 数组

问题描述

数组示例:

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

我想过滤掉名称不以开头的对象Jo

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

结果可能是内部带有 json 数组的 String 或 JValue。

标签: scalajson4s

解决方案


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

推荐阅读