我正在进行 JOLT 转换,其中需要合并两个字段:AccountNumber 和 EntityID,仅保留非空值。在我的输入中,这些字段之一始终具有值,但绝不会同时具有值。此外,我想在输出中保留其他相关属性。
这是我使用虚拟数据简化输入 JSON 的示例:
{
"AccountNumber": "123456",
"EntityID": "",
"TransactionYear": "2023",
"TransactionMonth": "03",
"TransactionDay": "05",
"TransactionHour": "10",
"TransactionMinutes": "15",
"TransactionSeconds": "30",
"ComponentNumber": "12345",
"Price": "250.00",
"CurrencyCode": "USD"
}
目标: 合并 AccountNumber 和 EntityID,仅保留非空值。由于这些字段之一始终包含一个值,因此我希望输出能够反映该值而不创建数组。 保留其他属性:在输出中保留 TransactionYear、TransactionMonth、TransactionDay、TransactionHour、TransactionMinutes、TransactionSeconds、ComponentNumber、Price 和CurrencyCode。
这是我正在使用的 JOLT 规格:
[{
"operation": "shift",
"spec": {
"AccountNumber": "Temp.AccountNumber",
"EntityID": "Temp.EntityID",
"TransactionYear": "TransactionData.TransactionYear",
"TransactionMonth": "TransactionData.TransactionMonth",
"TransactionDay": "TransactionData.TransactionDay",
"TransactionHour": "TransactionData.TransactionHour",
"TransactionMinutes": "TransactionData.TransactionMinutes",
"TransactionSeconds": "TransactionData.TransactionSeconds",
"ComponentNumber": "NewPrice.ComponentNumber",
"Price": "NewPrice.SpecialPrice.Price",
"CurrencyCode": "NewPrice.SpecialPrice.CurrencyCode"
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"AccountNumber": "=firstNotNull(@(1,Temp.AccountNumber), @(1,Temp.EntityID))"
}
},
{
"operation": "remove",
"spec": {
"Temp": ""
}
}]
问题: 我得到的输出仍然包含 AccountNumber 作为数组:
{
"AccountNumber": [ "", "123456" ],
"TransactionData": {
"TransactionYear": "2023",
"TransactionMonth": "03",
"TransactionDay": "05",
"TransactionHour": "10",
"TransactionMinutes": "15",
"TransactionSeconds": "30"
},
"NewPrice": {
"ComponentNumber": "12345",
"SpecialPrice": {
"Price": "250.00",
"CurrencyCode": "USD"
}
}
}
期望的输出: 我希望 AccountNumber 是单个值(AccountNumber 或 EntityID),而不是数组,同时保留所有其他属性:
{
"AccountNumber": "123456",
"TransactionData": {
"TransactionYear": "2023",
"TransactionMonth": "03",
"TransactionDay": "05",
"TransactionHour": "10",
"TransactionMinutes": "15",
"TransactionSeconds": "30"
},
"NewPrice": {
"ComponentNumber": "12345",
"SpecialPrice": {
"Price": "250.00",
"CurrencyCode": "USD"
}
}
}
问题: 如何修改 JOLT 规范以确保仅保留 AccountNumber 和 EntityID 之间的第一个非空值而不生成数组,同时仍保留所有其他属性?
提前谢谢您!
您可以使用以下转换规范:
[
{
"operation": "shift",
"spec": {
"AccountNumber|EntityID": "Temp.AccountNumber",
"*tion*": "&(0,1)tionData.&", //TransactionData
"*": "NewPrice.&" //others
}
},
{//combine the components of the "AccountNumber" array
"operation": "modify-overwrite-beta",
"spec": {
"Temp": {
"AccountNumber": "=join('',@(1,&))"
}
}
}
]
网站上的演示使用v0.1.1的Jolt Transform演示是: