Я борюсь за 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(_))
)
)
Я бы действительно очень ценю некоторую помощь.