Apache Nifi 1.7.1使用分隔符将Json展平

时间:2018-10-22 09:43:58

标签: json apache-nifi jolt

我正在使用带有定界符_的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_也受到干扰。有什么办法可以规避吗? (也许是一种逃避非记录类型的方法?)

2 个答案:

答案 0 :(得分:2)

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

  • 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处理器:

enter image description here

输出:

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

答案 1 :(得分:0)

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

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

简而言之:NiFi本身无法采取任何措施来绕开此事。