首页 文章

Apache Nifi:如何使用Nifi处理器将字符串(text / plain)转换为JSON类型?

提问于
浏览
0

请引导我使用适当的Nifi处理器组件将字符串转换为json的正确组件 .

Input是一个内容类型为text / plain的字符串

{ productName : "tv", locationName: " chennai"}

EvaluateJsonPath的输出仍然与我无法根据json路径评估json属性相同,因为输入的内容类型错误 .

{ 
 productName : "tv",
 locationName: " chennai"
}

注意:尝试使用SplitText,AttirtubesToJson处理器无法实现所需的转换 .

1 回答

  • 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内容 . 处理器使用严格的验证器,您需要使用文本操作或正则表达式将此内容更新为以下内容:

    {"productName":"tv", "locationName":"chennai"}
    

    完成此操作后(通过 ReplaceText 等), EvaluateJsonPath 处理器将正常工作 .

    另外,要清楚, EvaluateJsonPath 旨在执行JSONPath表达式以将JSON值提取到flowfile属性 . 它不是为了将任意文本操作为JSON格式而设计的 .

    Update

    没有将任意数据转换为JSON的通用过程 . 根据您提供的具体输入, ReplaceText 的以下值将其转换为有效的JSON:

    • 搜索值: (?<!\")(\w+)(?=[\s:])

    • 替换值: "$1"

    • 替换战略: Regex Replace

    • 评估模式: Entire text

    如果您以其他方式获得无效的传入数据,则必须修改此过程 . 您可能对JSONLint之类的内容感兴趣,以验证和格式化您的传入数据 .

相关问题