Переименуйте свойство в зависимости от значения подчиненного свойства, используя спецификацию Jolt

У меня есть необходимость изменить имя свойства JSON, но только если значение подчиненного свойства является конкретным значением. В приведенном ниже примере я хочу переименовать data.relationships.policyHolder в data.relationships.companies но только если data.relationships.policyHolder.data.type равняется "companies", Может ли тряска сделать что-то подобное?

вход

{
"data": {
    "type": "clients",
    "id": "U5QYNSHY27CPD6DBQL2PRV6EU2BIJZ6G6STH47Q-",
    "relationships": {
        "policyHolder": {
            "data": {
                "type": "companies",
                "id": "U5QYNSHY27CPD6DBQL2PRV6EU34NPSGEQKCOPRXUUZ7H4---"
            }
        },
        "persons": {
            "data": {
                "type": "persons",
                "id": "6H4IN45HMHCKN6MG27ZE5V6EU34NPRVD6GB6PEI-"
            }
        }
    }
}

}

Выход

{
"data": {
    "type": "clients",
    "id": "U5QYNSHY27CPD6DBQL2PRV6EU2BIJZ6G6STH47Q-",
    "relationships": {
        "companies": {
            "data": {
                "type": "companies",
                "id": "U5QYNSHY27CPD6DBQL2PRV6EU34NPSGEQKCOPRXUUZ7H4---"
            }
        },
        "persons": {
            "data": {
                "type": "persons",
                "id": "6H4IN45HMHCKN6MG27ZE5V6EU34NPRVD6GB6PEI-"
            }
        }
    }
}

1 ответ

Решение

Да, это немного некрасиво, но это работает.

спекуляция

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        // pass type and id thru
        "type": "data.type",
        "id": "data.id",

        "relationships": {
          "*": { // policyHolder, persons, etc
            "data": {
              "type": {
                // if the type is companies
                "companies": {
                  // then grab the whole blob of json at the "data" level
                  //  and copy it to the outut at "data.relationships.companies"
                  "@3": "data.relationships.companies"
                },
                // all other values of "type", just pass the "data" blob thru
                //  at the same path in the output.
                "*": {
                  "@3": "data.relationships.&4"
                }
              }
            }
          }
        }
      }
    }
  }
]
Другие вопросы по тегам