Apache Nifi 1.7.1 Flatten Json 带分隔符

Apache Nifi 1.7.1 Flatten Json with delimiter

我正在使用带定界符 _ 的 Flatten Json 处理器,到目前为止它工作正常,它确实压平了嵌套记录。但我也注意到它会干扰其中已经有“_”的键。例如:

{
"first_name": "myfirstname",
"last_name":  "mylastname",
"address": {
            "billing": "mybilling",
            "shipping": "myshipping"
           }
}

扁平化为:

{
"[\"first_name\"]": "myfirstname",
"[\"last_name\"]":  "mylastname",
"address_billing": "mybilling",
"address_shipping": "myshipping"
 }

同时,'address' 记录按预期变平,具有 _ 字符的键 first_namelast_name 也受到干扰。有什么办法可以绕过这个吗? (也许是一种转义非记录类型的方法?)

NiFi 1.7.1 在 0.5.0 版本中使用了一个名为 json-flattener 的外部库。 当前 unconditionally 检查保留字符并将其替换为您所看到的形式。 这样做的原因是文档可以再次明确地展开。

有一个 pull request 实现了禁用此功能的选项,但它自 2017 年 7 月以来未被合并。

简而言之:目前您无法在 NiFi 内部做任何事情来规避这一点。

要解决此问题,您可以使用

  • JoltTransformJson 处理器

    (或)

  • FlattenJson 中保留 分隔符(如 '|'、'-'..etc) not present in key 个名字。

1. Using JoltTransformJson Processor:

规格:

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "address": {
        "*": "address_&"
      }
    }
  }
]

输出:

{
  "first_name" : "myfirstname",
  "last_name" : "mylastname",
  "address_billing" : "mybilling",
  "address_shipping" : "myshipping"
}

2.FlattenJson Processor:

输出:

{
    "first_name": "myfirstname",
    "last_name": "mylastname",
    "address|billing": "mybilling",
    "address|shipping": "myshipping"
}