如何在 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")
以下面的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")