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_name
和 last_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"
}
我正在使用带定界符 _
的 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
也受到干扰。有什么办法可以绕过这个吗? (也许是一种转义非记录类型的方法?)
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"
}