如何从Nifi中的json中提取多个字段?

时间:2019-03-14 16:48:16

标签: apache-nifi

我有JSON个有效载荷;

{
   "id": "",
   "name": "",
   "A": {...},
   "B": {...},
   "C": {...}
}

我想将A, B and C字段提取为id and name字段作为不同的记录。像这样;

{
       "id": "",
       "name": "",
       "A": {...}
}

{
       "id": "",
       "name": "",
       "B": {...}
}

{
       "id": "",
       "name": "",
       "C": {...}
}

我正在使用基于记录的处理器。但是我不知道如何在Nifi中使用基于记录的处理器来做到这一点。

2 个答案:

答案 0 :(得分:1)

您可能正在寻找“ EvaluateJsonPath”。您可以添加JSONPath表达式,该表达式将转换为属性或写入流文件。

http://jsonpath.com/是一种方便的网络工具,可以测试您的表情。

答案 1 :(得分:1)

如果您想使用基于记录的处理器,那么JoltTransformRecord可以解决问题。只需将Jolt Transformation DSL设置为Chain,将Jolt Specification设置为:

[
  {
    "operation": "shift",
    "spec": {
      "id": "id",
      "name": "name",
      "*": {
        "@": "array.&"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "array": {
        "*": {
          "@(2,id)": "[#2].id",
          "@(2,name)": "[#2].name",
          "@": "[#2].&"
        }
      }
    }
  }
]

这将首先将您的唯一元素放入数组中,并从中分离出公共键,然后将公共键放入所有元素中,同时将数组提取到顶部数组中。

然后,如果您也希望它们也作为不同的FlowFiles,则可以SplitRecord阵列就可以了!