使用PlayJsonTransformer修剪Json对象中数组中的每个项目

时间:2018-03-08 09:14:54

标签: json scala playframework

我的json结构看起来像这样:

{
  "persons": [
    {
      "name": "Tims",
      "surname": "YourAunty"
    },
    {
      "name": "Bobs",
      "surname": "YourUncle"
    }
  ]
}

我想应用变压器使其看起来像这样

{
  "persons": [
    {
      "name": "Tims"
    },
    {
      "name": "Bobs"
    }
  ]
}

到目前为止,我所做的是一个变换器,用于删除姓氏,如果它不是一个数组,它就有效:

(__ \ 'persons \ 'surname).json.prune

如何更改此代码以将修剪应用于数组中的每个条目?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用此方法,使用案例类从json中获取必需的字段,然后根据需要创建一个json。

val data = Json.parse("""{
                           "persons": [
                             {
                               "name": "Tims",
                               "surname": "YourAunty"
                             }, {
                               "name": "Bobs",
                               "surname": "YourUncle"
                             }
                           ]
                         }""")

case class Persons(name: String)
implicit val format = Json.format[Persons]

Json.toJson(Map("persons" -> (data \ "persons").asOpt[List[Persons]]))

编辑:

可能有点脏,但试试这个:

var jsonData: List[JsValue] = (data \ "persons").asOpt[List[JsValue]].fold(List.empty[JsValue])(identity) 

Json.toJson(Map("persons" -> jsonData.map(_.as[Map[String, String]]).map(_ - "surname")))// whatever you want to delete from map just type it here.