【问题标题】:Apache Nifi: How to convert string (text/plain) to JSON type using Nifi processor?Apache Nifi:如何使用 Nifi 处理器将字符串(文本/纯文本)转换为 JSON 类型?
【发布时间】:2017-08-23 01:42:39
【问题描述】:

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

输入是内容类型text/plain的字符串

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

EvaluateJsonPath 的输出仍然相同,因为作为输入发送的内容类型错误,我无法基于 json 路径评估 json 属性。

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

注意:尝试过 SplitText、AttirtubesToJson 处理器无法实现所需的转换。

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    这是因为输入数据不是有效的 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 值提取到流文件属性。它并非旨在将任意文本操作为 JSON 格式。

    更新

    没有将任意数据转换为 JSON 的通用过程。鉴于您提供的特定输入,ReplaceText 的以下值会将其转换为有效的 JSON:

    • 搜索值:(?<!\")(\w+)(?=[\s:])
    • 替换值:"$1"
    • 更换策略:Regex Replace
    • 评估模式:Entire text

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

    【讨论】:

    • 安迪,感谢您的回答,是的,我知道格式不正确 如何将传入的字符串转换为 JSON 。我们有任何组件来处理它吗?或者我如何在 ReplaceText 中做到这一点,您能否发布一个很棒的替换文本示例。
    • 安迪,谢谢你的帮助,我会试试这个。我们为 nifi 准备了很多复杂的处理器,但是像 ConvertStringToJson 这样的东西肯定会帮助我们做很多简单的过程,而不是编写正则表达式模式等。无论如何感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2020-10-01
    相关资源
    最近更新 更多