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

How to recursively parse a single Json field that is defined multiple times, in Play Json

以下面的JSON字符串为例:

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

字段createdTime在文档中定义了两次。 要 return 顶层的 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"
    }
}]"""

要递归地return "createdTime"定义为:

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

然而,这也是 return 嵌套的 createdTime 字段。有没有办法递归地 return 只有顶层 createdTime?

当您解析 document1 并将其转换为 JsArray 时,您应该有一个数组。然后你可以用 map 迭代这个值来得到顶层的 createdTime's.

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