【问题标题】:JOLT - Join arrays in nested arrayJOLT - 在嵌套数组中加入数组
【发布时间】:2021-07-05 11:00:48
【问题描述】:

我正在尝试实现以下转换。但是,我的解决方案将不需要的 null 值添加到最终数组中。

转换需要在child 数组中为所有root 元素移动名称。我创建了 3 个案例来说明问题。

案例一

输入

{
  "root": [
    {
      "child": [
        {
          "name": "John"
        },
        {
          "name": "Frazer"
        }
      ]
    },
    {
      "child": [
        {
          "name": "Brandon"
        },
        {
          "name": "Josef"
        }
      ]
    }
  ]
}

期望的输出

{
  "NAMES": ["John,Frazer","Brandon,Josef"]
}

案例2:一个child为空

输入

{
  "root": [
    {
      "child": []
    },
    {
      "child": [
        {
          "name": "Brandon"
        },
        {
          "name": "Josef"
        }
      ]
    }
  ]
}

期望的输出

{
   "NAMES": ["","Brandon,Josef"]
}

案例 3:所有childs 都是空的

输入

{
  "root": [
    {
      "child": []
    },
    {
      "child": []
    }
  ]
}

期望的输出

{
   "NAMES": ["",""]
}

编辑: root 数组总是至少有 1 个元素。

当前的 JOLT 规范运行良好,但 child 为空数组的情况除外。它生成 null 值,我试图指定一个 空字符串 (或任何硬编码的字符串值,例如 "NO_NAMES"

[
  {
    "operation": "shift",
    "spec": {
      "root": {
        "*": {
          "child": {
            "*": {
              "name": "NAMES[&3]"
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "NAMES": {
        "*": "=trim"
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "NAMES": "MANY"
    }
    },
  {
    "operation": "default",
    "spec": {
      "NAMES": []
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "NAMES": {
        "*": "=join(',',@0)"
      }
    }
  }
]

【问题讨论】:

  • 嗨大卫,你目前使用什么规格?
  • 嗨@BarbarosÖzhan,再次感谢您的帮助。我已经添加了我当前的规格。 default 节点是我的尝试之一,但并不能帮助我实现目标。
  • 这是我的主要问题。我需要它改为{ "NAMES" : [ "", "" ] }。或{ "NAMES" : [ "NO_NAMES", "NO_NAMES" ] }。两种解决方案都是有效的。 NAMES 的长度应与 root 相同。

标签: apache-nifi jolt


【解决方案1】:

您可以应用连续变换 modify-overwrite-beta 然后 shift 以确定列表的逗号分隔元素(除非它们的大小为零,这种情况下只会出现双引号),然后将它们连接到一个列表中,例如

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "root": {
        "*": {
          "child": { "*": "@(0,name)" },
          "NAMES": "=join(',',@(1,child))"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "root": {
        "*": {
          "NAMES": "&"
        }
      }
    }
  }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多