首先,使用'SplitJson”处理器将包含数组的 JSON 对象拆分为多个 JSON 对象。
接着,使用'EvaluateJsonPath”处理器和'JsonPath”表达式来提取数组的元素。
例如,假设有一个包含数组的 JSON 对象:
{ "id": 1, "name": "John", "hobbies": ["swimming", "running", "reading"] }
使用表达式'$.hobbies[*]”即可提取 hobbies 数组的所有元素:
swimming running reading
接下来,使用'AttributesToJson”处理器将提取到的元素格式化为 JSON 对象。
最后,使用'MergeContent”处理器将所有格式化后的 JSON 对象合并为一个 JSON 数据流。
以下是基于 Apache Nifi 实现此操作的示例代码:
将样例 JSON 投递到入口处+->SplitJson+->EvaluateJsonPath,分为多个流:
$.id -> # id
$.name -> # name
$.hobbies[*] -> # hobby
每个单独的流+->AttributesToJson+->MergeContent,最终拼成完整的 JSON。
假设我们有以下 JSON 数据流: { "id": 1, "name": "John", "hobbies": ["swimming", "running", "reading"] }
通过以上处理器,我们可以获得以下结果:
流1: { "id": 1 }
流2: { "name": "John" }
流3: { "hobby": "swimming" }
流4: { "hobby": "running" }
流5: { "hobby": "reading" }
最终,我们使用'MergeContent”处理器将所有流合并为完整的 JSON 数据流:
输出: { "id": 1, "name": "John", "hobbies": [ { "hobby": "swimming" }, { "