Как рекурсивно разобрать одно поле Json, определенное несколько раз, в 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"
}
}]"""
Для рекурсивного возврата "createTime" определяется как:
val createdTime1 = Json.parse(document1) \\ "createdTime"
Однако это также возвращает вложенный createdTime
поля. Есть ли способ рекурсивно вернуть только верхний слой createdTime
?
1 ответ
Решение
Когда вы анализируете document1
и бросить его JsArray
, у вас должен быть массив. Затем вы можете перебрать значение с map
чтобы получить верхний слой созданного времени.
val createdTimes = Json.parse(document1).as[JsArray].value.map(_ \ "createdTime")