我尝试将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内容中?
有可能吗?
任何帮助表示赞赏和接受?
答案 0 :(得分:1)
您可以选择多种选项来提供所需的功能。
仅使用提供的处理器,您可以使用EvaluateJsonPath
或RouteOnContent
来检测是否存在所需的键和值,然后使用ReplaceText
或可能JoltTransformJSON
来{ {3}}。您的流量文件似乎非常小,因此这不应该是一个问题,但要注意JoltTransformJSON
不能以流式方式运行,因此对于大型流量文件,这个会对内存消耗产生负面影响。
如果您对Groovy / Ruby / Jython / Javascript / Lua感到满意,您也可以使用update the content to include your default value进行一次操作。使用Groovy内置的JSON处理(快速将JSON块视为地图对象),您可以在一行中执行检测和默认填充,并且非常容易地将流文件内容写回。 ExecuteScript
是一个非常有用且功能多样的工具,它可以为每个问题推荐它,但在这种情况下,它可能是最简单的解决方案。