Как рекурсивно разобрать одно поле 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")

Другие вопросы по тегам