scala - Scala & json4s:如何过滤 json 数组
问题描述
数组示例:
[
{
"name": "John"
},
{
"name": "Joseph"
},
{
"name": "Peter"
}
]
我想过滤掉名称不以开头的对象Jo
:
[
{
"name": "John"
},
{
"name": "Joseph"
}
]
结果可能是内部带有 json 数组的 String 或 JValue。
解决方案
我无法在 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)
推荐阅读
- yosys - How to add support for a new Lattice ice40 FPGA model into Yosys/Arachne-prn toolchain?
- node.js - Return Response After For loop in Node Js?
- python - 使用最近邻插值调整 1 通道 numpy(图像)数组的大小
- angular - Angular 12 and IE 11 production build error. TypeError: Object doesn't support this action
- java - Sending bulk sms to the phone number using REST API
- vue.js - Show images files using Vue.js
- google-tag-manager - ec.js 可以用服务器端 gtm 代理吗?
- drupal-8 - Drupal 仅在显示为页面但不在显示块中时提供选项卡菜单
- javascript - 坐标(纬度,语言)的任何地址?
- ruby - 在单例方法上使用 sorbet 接口抽象