基于 JSON 字段的 Jolt 条件标志

问题描述 投票:0回答:1

我有一个 JSON 输入如下

场景1

{
  "accountType": "Admin",
  "accountInformation": {
    "user": "internal",
    "source": "Facebook",
    "internalAccount": "false"
  }
}

输出.json

{
  "userFlag":true
}

我需要在Java中派生一个userFlag,只有当用户是“internal”并且来源是“Facebook”时,它才应该是true。如果用户为 null 或来源不是“Facebook”,则应将 userFlag 设置为internalAccount 的值。

场景2:

{
  "accountType": "Admin",
  "accountInformation": {
    "user": "internal",
    "source": "Google",
    "internalAccount": "false"
  }
}

输出.json

{
  "userFlag":false
}
[
  {
    "operation": "shift",
    "spec": {
      "accountInformation": {
        "source": {
          "Facebook": {
            "#true": "sourceFlag"
          }
        },
        "user": {
          "internal": {
            "#true": "userInternalFlag"
          }
        },
        "internalAccount": "userFlag"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "result": "=equals(@(1,sourceFlag),@(1,userInternalFlag))"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "userFlag": "=equals(@(1,result), 'true')"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "userFlag": "=toBoolean(@(1,userFlag))"
    }
  },
  {
    "operation": "remove",
    "spec": {
      "sourceFlag": "",
      "userInternalFlag": "",
      "result": ""
    }
  }
]

产生输出:

{
  "userFlag" : true
}

但是此输入不应产生 value as

{
  "accountType": "Admin",
  "accountInformation": {
    "user": "",
    "source": "Facebook",
    "internalAccount": false
  }
}

实际

{
  "userFlag" : true
}

预期

{
  "userFlag" : false
}
json transformation jolt
1个回答
0
投票

您可以使用以下 Jolt 规格

[
  {
    "operation": "modify-default-beta",
    "spec": {
      "accountInformation": {
        "user": "null",
        "source": "null"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "accountInformation": {
        "user": {
          "internal": {
            "@(2,source)": {
              "Facebook": {
                "#true": "userFlag"
              },
              "*": {
                "@(4,internalAccount)": "userFlag"
              }
            }
          },
          "*": {
            "@(2,internalAccount)": "userFlag"
          }
        }
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.