您可以使用 JOLT 对 JSON 执行 or 条件吗

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

是否可以在 JOLT 转换上执行多个条件来创建 or 或 and ?

我找到了一些关于 If Else 的文档,但无法将其应用于我正在尝试的内容。这是单个元素上的 if else,我需要它与多个 or 一起使用。例如我有以下 json:

[
  {
    "alpha": "a",
    "beta": "b",
    "omega": "o",
    "exists": true,
    "description": "goodbye world"
  },
  {
    "alpha": "1",
    "beta": "2",
    "omega": "3",
    "exists": false,
    "description": "hello world"
  },
  {
    "alpha": "z",
    "beta": "x",
    "omega": "y",
    "exists": true,
    "description": "hello mars"
  }
]

我需要找出一个 JOLT,它可以查看整个数组并说“如果 Exists 为 True 或描述为 hello world”,因此它输出:

[
  {
    "alpha": "a",
    "beta": "b",
    "omega": "o",
    "exists": true,
    "description": "goodbye world"
  },
  {
    "alpha": "1",
    "beta": "2",
    "omega": "3",
    "exists": false,
    "description": "hello world"
  },
  {
    "alpha": "z",
    "beta": "x",
    "omega": "y",
    "exists": true,
    "description": "hello mars"
  }
]

摇晃找到你好世界:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "description": {
          "hello world": null,
          "*": {
            "@2": "&1"
          }
        }
      }
    }
  }
]

我知道如何震动 if 存在和过滤器或描述部分,但如何将它们放在一起以像 or 子句一样协同工作,例如: if((“存在”==“真”)|(“描述”==“你好世界”))

json apache-nifi jolt
1个回答
0
投票

您可以通过连接这些值(

true
hello world
)来生成新属性,然后通过条件检查方法(例如

)检查是否存在
[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "ed": "=concat(@(1,exists),@(1,description))"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "ed": {
          "true*|*hello world": { // | stands for OR
            "@2": ""
          }
        }
      }
    }
  },
  { // get rd of the lately generated attribute
    "operation": "remove",
    "spec": {
      "*": {
        "ed": ""
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.