请指导我将正确的组件转换为json 使用适当的Nifi处理器组件。
输入是一个内容类型为text / plain
的字符串{ productName : "tv", locationName: " chennai"}
EvaluateJsonPath的输出仍然与我无法根据json路径评估json属性相同,因为输入的内容类型错误。
{
productName : "tv",
locationName: " chennai"
}
注意:尝试过SplitText,AttirtubesToJson处理器无法实现所需的转换。
答案 0 :(得分:2)
这是因为输入数据无效JSON。我在本地重新创建了此流,而EvaluateJsonPath
的错误是
2017-08-22 10:20:21,079 ERROR [Timer-Driven Process Thread-5] o.a.n.p.standard.EvaluateJsonPath EvaluateJsonPath[id=0aec27af-015e-1000-fac5-4e0f455a10fe] FlowFile StandardFlowFileRecord[uuid=b903eeb0-8985-4517-910f-5e3bbbccb8dc,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1503421928125-1, container=default, section=1], offset=376, length=47],offset=0,name=91708717370829,size=47] did not have valid JSON content.
压缩到 [flowfile]的内容没有有效的JSON内容。处理器使用严格的验证器,您提供的输入不是有效的JSON。您需要使用文本操作或正则表达式将此内容更新为以下内容:
{"productName":"tv", "locationName":"chennai"}
完成此操作后(通过ReplaceText
等),EvaluateJsonPath
处理器将正常运行。
另外,为了清楚起见,EvaluateJsonPath
旨在执行JSONPath表达式以将JSON值提取到flowfile属性。它不是为了将任意文本操作为JSON格式而设计的。
<强>更新强>
没有将任意数据转换为JSON的通用流程。根据您提供的具体输入,ReplaceText
的以下值会将其转换为有效的JSON:
(?<!\")(\w+)(?=[\s:])
"$1"
Regex Replace
Entire text
如果您以其他方式获取无效的传入数据,则必须修改此过程。您可能对JSONLint之类的内容感兴趣,以验证和格式化您的传入数据。