【问题标题】:Apache Nifi 1.7.1 Flatten Json with delimiterApache Nifi 1.7.1 用分隔符展平 Json
【发布时间】:2018-10-22 09:43:57
【问题描述】:

我正在使用带有分隔符 _ 的 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_name 和last_name 也受到干扰。有没有办法可以绕过这个? (也许是一种逃避非记录类型的方法?)

【问题讨论】:

    标签: json apache-nifi jolt


    【解决方案1】:

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

    • JoltTransformJson 处理器

      (或)

    • 在 FlattenJson 中保留 分隔符(如 '|','-'..etc) not present in key 姓名。

    1.使用 JoltTransformJson 处理器:

    规格:

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

    输出:

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

    2.FlattenJson 处理器:

    输出:

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

    【讨论】:

      【解决方案2】:

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

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

      简而言之:目前您在 NiFi 本身内无能为力。

      【讨论】:

        猜你喜欢
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多