使用 JOLTTRANSFORMJSON APACHE NIFI 将属性添加到我的 JSON 文件

问题描述 投票:0回答:1

我正在尝试使用 apache nifi 来练习转换数据,我一直在尝试使用 GetFile 来获取我的 4 个 JSON 文件,我的目标是转换这 4 合 1,但对我来说重要的是要记住它们来自哪里,因为 1引用帖子、一篇引用广告、一篇引用视频 我一直在使用更新属性来保存文件名,并使用更新属性来更新数据,然后使用合并仅生成 1 个文件

我在合并文件时没有问题,但是当我尝试添加新属性时我无法做得很好

{
  "impressions_history_ads_seen": [
    {
      "string_map_data": {
        "Time": {
          "timestamp": 1705789300
        }
      }
    },
    {
      "string_map_data": {
        "Time": {
          "timestamp": 1705789746
        }
      }
    },
    {
      "string_map_data": {
        "Author": {
          "value": "twdss"
        },
        "Time": {
          "timestamp": 1705790493
        }
      }
    },
    {
      "string_map_data": {
        "Author": {
          "value": "mitprofessionaled"
        },
        "Time": {
          "timestamp": 1705809684
        }
      }
    }

这是我原来的json

我想在作者和时间的同一级别添加 type_interaction 的值并给出 >filename 值

在更新数据中

filename = ${filename:substringBeforeLast('.')}

> in the JoltTransformJSON
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
            "*":&,
            "type_interaction":"${filename}"
        }
      }
    }
  }
]
json etl apache-nifi jolt
1个回答
0
投票

您可以尝试以下震动规格。请记住,当您进行移位规范并且想要保持相同的结构时,您需要在 RHS 中指定遍历的完整结构。

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "*": "&3.[&2].&1.&",
            "#${filename}": "&3.[&2].&1.type_interaction"
          }
        }
      }
    }
  }
]

此外,当您想要在班次规范中设置默认值时,您可以在 LHS 中以 # 开头指定值。由于 Nifi 在 Jolt 规范中允许表达式语言,因此流程文件属性 ${filename} 将在转换之前替换为实际值。

© www.soinside.com 2019 - 2024. All rights reserved.