Play JSON трансформер для переименования (сокращения) поля на карте - PullRequest
0 голосов
/ 21 апреля 2020

Я борюсь за 3 дня, чтобы преобразовать следующее JSON:

{
    "invoiceState": {
        "userId": "832eac3d-89d2-428c-9007-688b3e590533",
        "invoices": {
            "407613d7-7dc0-4cd6-8d62-41eea7067ca0": {
                "externalId": "I-000000-000001",
                "date": "1970-01-01T01:00+01:00[Europe/Vienna]",
            },
            "8d16b2f8-ced0-4b41-8b6b-b275709ba88a": {
                "externalId": "I-000000-000002",
                "date": "1970-01-01T01:00+01:00[Europe/Vienna]",
            }
        }
    }
}

в это:

{
    "invoiceState": {
        "userId": "832eac3d-89d2-428c-9007-688b3e590533",
        "invoices": {
            "407613d7-7dc0-4cd6-8d62-41eea7067ca0": {
                "externalId": "I-000000-000001",
                "orderDate": "1970-01-01T01:00+01:00[Europe/Vienna]",
            },
            "8d16b2f8-ced0-4b41-8b6b-b275709ba88a": {
                "externalId": "I-000000-000002",
                "orderDate": "1970-01-01T01:00+01:00[Europe/Vienna]",
            }
        }
    }
}

Как видите, единственное, что я хочу достичь - переименовать поле на карте, в этом случае его переименование date в orderDate.

Независимо от того, что я пытаюсь, я всегда получаю 1 из 2 возможных результатов: либо дата не переименовано или самое внешнее поле userId отсутствует в конечном JSON.

Самое близкое, что я пришел, - это использование кода, подобного следующему:

      (JsPath \ "invoiceState" \ "invoices").json
      .update(
        Reads
          .map(
            (JsPath \ "orderDate").json
              .copyFrom((JsPath \ "date").json.pick)
          )
          .map(JsObject(_))
      )
      .andThen(
        (JsPath \ "invoiceState" \ "invoices").json
          .pickBranch(
            Reads
              .map(
                (JsPath \ "date").json.prune
              )
              .map(JsObject(_))
          )
      )

Я бы действительно очень ценю некоторую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...