Переименуйте свойство в зависимости от значения подчиненного свойства, используя спецификацию 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"
}
}
}
}
}
}
}
}
]