我正在使用 JOLT 转换,该转换获取输入 JSON 对象并将其转换为新结构,但我需要处理输入中同时存在accepts_marketing 和 email_marketing_consent 或只有其中之一可用的情况。
输入 JSON 示例:
{
"email": "[email protected]",
"first_name": "John",
"accepts_marketing": false,
"email_marketing_consent": {
"state": "not_subscribed",
"opt_in_level": "single_opt_in",
"consent_updated_at": null
}
}
预期输出:
{
"optin_newsletter": false,
"email": "[email protected]",
"first_name": "John"
}
当前 JOLT 改造:
[
{
"operation": "shift",
"spec": {
"accepts_marketing": "optin_newsletter",
"email_marketing_consent": {
"state": {
"subscribed": {
"#true": "optin_newsletter"
},
"*": {
"#false": "optin_newsletter"
}
}
},
"email": "email",
"first_name": "first_name"
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"subscribed": "=toBoolean"
}
}
]
问题:
当输入中同时存在accepts_marketing 和 email_marketing_consent 时,optin_newsletter 的输出将变成一个数组:[ false, "false" ],但我希望它是一个简单的 false 值。
当输入中仅存在一个字段(accepts_marketing 或 email_marketing_consent)时,我希望输出仅反映该值,没有重复或错误。
问题:
1. 如何处理同时存在accepts_marketing 和email_marketing_consent 且我只想要optin_newsletter 的单个布尔值(而不是值数组)的情况?
2. 如果仅存在accepts_marketing或仅email_marketing_consent,我如何确保转换为optin_newsletter产生正确的值?
3. 如何修改 JOLT 规范以有条件地使用这些字段之一,或者在两个字段都可用时优先考虑其中一个字段?
其他详细信息:
目标是 optin_newsletter 字段始终为布尔值(true 或 false),即使两个字段(accepts_marketing 和 email_marketing_consent)都存在。
我正在尝试将 email_marketing_consent.state 值(例如“subscribed”和“not_subscribed”)转换为布尔值(分别为 true 和 false)以保持一致性。
看看以下规范是否有效:
[
{
"operation": "shift",
"spec": {
"email": "&",
"first_name": "&",
"accepts_marketing": "option_newsletter",
"email_marketing_consent": {
"state": {
"subscribed": {
"true": "option_newsletter"
},
"*": {
"#false": "option_newsletter"
}
}
}
}
},
{
"operation": "cardinality",
"spec": {
"option_newsletter": "ONE"
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"option_newsletter": "=toBoolean"
}
}
]