如何使用json内容的表达式语言?

时间:2016-11-04 11:43:22

标签: json apache-nifi

我尝试将csv转换为json。

我的CSV数据如下...,

Top     
Jun        Sdas 123
Jul        gh   456
Aug-16     Rav  789
Jan-16     Trai 767

现在我使用了以下处理器结构..,

GetFile-->InferredAvroSchema-->ConvertCSVToAvro-->ConvertAvroToJson-->PutFile.

现在json的结果如下。,

[
{"field_0": "Top", "field_1": "", "field_2": null},
{"field_0": "Jun", "field_1": "Sdas", "field_2": 123},
{"field_0": "Jul", "field_1": "gh", "field_2": 456},
{"field_0": "Aug-16", "field_1": "Rav", "field_2": 789},
{"field_0": "Jan-16", "field_1": "Trai", "field_2": 767}
]

现在我需要为" field_0"添加表达式语言。添加' -16'如果它不存在价值。

例如:" field_0"第二排有" Jun"。现在我需要检查" -16"是否存在于字段中,如果不存在则添加。

如何将nifi处理器中的表达式语言方法添加到json内容中?

有可能吗?

任何帮助表示赞赏和接受?

1 个答案:

答案 0 :(得分:1)

您可以选择多种选项来提供所需的功能。

仅使用提供的处理器,您可以使用EvaluateJsonPathRouteOnContent来检测是否存在所需的键和值,然后使用ReplaceText或可能JoltTransformJSON来{ {3}}。您的流量文件似乎非常小,因此这不应该是一个问题,但要注意JoltTransformJSON 不能以流式方式运行,因此对于大型流量文件,这个会对内存消耗产生负面影响。

如果您对Groovy / Ruby / Jython / Javascript / Lua感到满意,您也可以使用update the content to include your default value进行一次操作。使用Groovy内置的JSON处理(快速将JSON块视为地图对象),您可以在一行中执行检测和默认填充,并且非常容易地将流文件内容写回。 ExecuteScript是一个非常有用且功能多样的工具,它可以为每个问题推荐它,但在这种情况下,它可能是最简单的解决方案。