如何在多个JSON对象中提取顶级字段

时间:2017-10-18 11:31:33

标签: json scala playframework

  

给出JSON值:

val json = Json.parse(
"""
  |[{
  |      "name" : "Agency Co",
  |      "worker" :{
  |        "FirstName" : "Bob",
  |        "age" : 44,
  |        "role" : null
  |      }
  |    },
  |    {
  |      "name" : "Agency Inc",
  |      "worker" :{
  |        "FirstName" : "Robby",
  |        "age" : 23,
  |        "role" : null
  |      }
  |    }]
""")

当你这样做时:

(json \\ "FirstName").map(_.asOpt[String].getOrElse("Cannot find field")).toList

和#34; FirstNames"将被退回:

List("Bob", "Robby")

但是," name"上的(" \\")递归查找都找不到任何内容。即使有两种不同的字段,字段也不会起作用。使用(" \")只会返回第一次出现我需要一个"名称"的列表。

如何返回多个顶级"名称"不同对象中的值?

1 个答案:

答案 0 :(得分:0)

    val listOfObjects: List[JsObject] = json.asOpt[List[JsObject]] match {
      case Some(x) => x
      case _ => List.empty[JsObject]
    }
    listOfObjects.map(releaseObject => (releaseObject \ "name")
      .asOpt[String].getOrElse("Cannot find field"))
}