如何在Play Json中递归地解析多次定义的单个Json字段

时间:2017-10-03 10:41:40

标签: json scala playframework play-json

以下面的JSON字符串为例:

val document = """{
    "id": "12345",
    "createdTime": "13332517",
    "data": {
        "status": "active",
        "createdTime": "13345178"
    }"""

字段createdTime在文档中定义了两次。 要返回顶层的createdTime,请执行以下操作:

val createdTime = Json.parse(document \ "createdTime")

获取以下JSON字符串;它与第一个示例相同,但它现在是一个数组:

val document1 = """[{
    "id": "12345",
    "createdTime": "13332517",
    "data": {
        "status": "active",
        "createdTime": "13345178"
    }
}, {
    "id": "67890",
    "createdTime": "13332565",
    "data": {
        "status": "active",
        "createdTime": "13345173"
    }
}]"""

以递归方式返回“createdTime”定义为:

val createdTime1 = Json.parse(document1) \\ "createdTime"

但是,这也会返回嵌套的createdTime字段。有没有办法递归返回顶层createdTime

1 个答案:

答案 0 :(得分:1)

解析document1并将其强制转换为JsArray时,您应该有一个数组。然后,您可以使用map迭代值以获取顶层createdTime's。

val createdTimes = Json.parse(document1).as[JsArray].value.map(_ \ "createdTime")