Scala和json4s:如何过滤json数组

问题描述 投票:0回答:1

数组示例:

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

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

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

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

scala json4s
1个回答
0
投票

我无法在json4s中找到直接的JSON查询机制,因此创建了一个case类。映射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)
© www.soinside.com 2019 - 2024. All rights reserved.