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

Для рекурсивного возврата "createdTime" определяется как:

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

Однако это также возвращает вложенные поля createdTime. Есть ли способ рекурсивно вернуть только верхний слой createdTime?


person ChazMcDingle    schedule 03.10.2017    source источник


Ответы (1)


Когда вы анализируете document1 и переводите его в JsArray, у вас должен быть массив. Затем вы можете повторить значение с помощью map, чтобы получить время создания верхнего слоя.

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

person Can    schedule 03.10.2017