Jolt - 如何比较 if else 条件的两个值

Jolt - How to compare two values for if else condition

提问人:Nishu 提问时间:7/14/2023 最后编辑:Barbaros ÖzhanNishu 更新时间:7/14/2023 访问量:182

问:

我必须在 Jolt 中转换,条件是如果 namedisplayName 中的值相同,则输出应将标志值 displayOnUI 设置为 true 否则为 false

输入:

[
  {
    "name": "Mike Ellis",
    "email": "[email protected]",
    "displayName": "MikeE"
  },
  {
    "name": "Sam Perry",
    "email": "[email protected]",
    "displayName": "Sam Perry"
  }
]

预期输出:

[
  {
    "name": "Mike Ellis",
    "email": "[email protected]",
    "displayName": "MikeE",
    "displayOnUi": false
  },
  {
    "name": "Sam Perry",
    "email": "[email protected]",
    "displayName": "Sam Perry",
    "displayOnUi": true
  }
]

我尝试转换,但无法获得正确的输出。有人可以帮忙吗?谢谢。

json apache-nifi 相等 性 jolt

评论


答:

1赞 Barbaros Özhan 7/14/2023 #1

您可以通过使用以下转换来检查属性的比较是形成数组(在这种情况下,只会生成 1 个元素)还是单个属性(在这种情况下,只会生成 2 个元素,嵌套在名为 Count 的新对象中),例如

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*ame": "Cnt[&1].Count.@0"
      },
      "@": "Original" // replicate the initial JSON value
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "Cnt": {
        "*": {
          "Count": "=size(@(1,&))"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "Count": "&1",
          "*": "&1.&"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "1": { // stands for the second component to compare
          "1": { // keep the values are equal
            "@(2,[0])": "[&3]",
            "#true": "[&3].displayOnUi"
          },
          "2": { // keep the values are UNequal
            "@(2,[0])": "[&3]",
            "#false": "[&3].displayOnUi"
          }
        }
      }
    }
  }
]

网站上的演示 http://jolt-demo.appspot.com/ 是:

enter image description here

评论

1赞 Nishu 7/14/2023
当然。做到了。