gpt4 book ai didi

java - 有没有办法使用 apache nifi 中的处理器从 json 字段中提取值并将该值替换到另一个 json 文件中?

转载 作者:行者123 更新时间:2023-12-02 03:32:32 26 4
gpt4 key购买 nike

所以我在 apache nifi 中创建了一个工作流程,从 gmail 中提取 csv 附件并将其转换为 json。我所坚持的是从我当前拥有的 json 中提取 3 个值(clientip、Country、user-agent),并将这些值替换到我拥有的另一个 json 中,该值将用于在另一个程序上运行警报。我不确定将使用什么处理器来实现这一目标。任何提示将不胜感激。

我尝试过使用提取属性和 JoltTransformJson,但我无法让它们按预期工作。

我从转换 csv 文件获得的第一个 json:

{
"clientip" : "116.255.157.126",
"Country" : "China",
"host" : "teachinglaw-prod.uis.georgetown.edu",
"useragent" : "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)",
"uri" : "//Config_Shell.php"
}

我编写的第二个 json 需要使用第一个 json 更新 ("data","message","data") 值:

    {
"title": "cat7-SQL Injection",
"description": "alert description",
"type": "Internal ",
"source": "Splunk ",
"sourceRef": "Splunk alert ",
"severity": 2,
"tlp": 2,
"artifacts": [{
"dataType": "ip",
"data": "176.121.14.180",
"message": "Belize",
"tags": ["SQL Injection"]
},
{
"dataType": "user - agent",
"data": "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19",
"tags": ["SQL Injection"]
}
],
"caseTemplate": "SQL Injection"
}

我需要找到一个处理器,在合并/替换值后可以给我这个结果:

    {
"title": "cat7-SQL Injection",
"description": "alert description",
"type": "Internal ",
"source": "Splunk ",
"sourceRef": "Splunk alert ",
"severity": 2,
"tlp": 2,
"artifacts": [{
"dataType": "ip",
"data": "116.255.157.126",
"message": "China",
"tags": ["SQL Injection"]
},
{
"dataType": "user - agent",
"data": "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)",
"tags": ["SQL Injection"]
}
],
"caseTemplate": "SQL Injection"
}

最佳答案

我建议使用EvaluateJSONPath处理器将所需的 JSON 值提取到流文件属性,然后路由到 ReplaceText并使用表达式语言将模板标记替换为属性值。例如,给定这个“输入 JSON”:

{
"clientip" : "116.255.157.126",
"Country" : "China",
"host" : "teachinglaw-prod.uis.georgetown.edu",
"useragent" : "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)",
"uri" : "//Config_Shell.php"
}

您的EvaluateJsonPath处理器应具有以下配置(任何未列出的属性都保留为默认值,最后 3 个是使用表格右上角的“+”按钮添加的“动态属性”):

  • 目的地:flowfile-attribute
  • IP:$.clientip
  • 消息:$.Country
  • user_agent:$.useragent

下一个处理器是 ReplaceText具有以下配置的处理器:

  • 搜索值:(?s)(^.*$)
  • 重置值(value):{...JSON template below...}

JSON 模板如下:

{
"title": "cat7-SQL Injection",
"description": "alert description",
"type": "Internal ",
"source": "Splunk ",
"sourceRef": "Splunk alert ",
"severity": 2,
"tlp": 2,
"artifacts": [{
"dataType": "ip",
"data": "<template_ip>",
"message": "<template_message>",
"tags": ["SQL Injection"]
},
{
"dataType": "user - agent",
"data": "<template_user_agent>",
"tags": ["SQL Injection"]
}
],
"caseTemplate": "SQL Injection"
}

<template_some_value> 形式的每个值将被匹配并且 some_value片段将被提取为 $2 引用的捕获组。

最后,另一个ReplaceText用于将属性值注入(inject)到每个模板标记位置。配置为:

  • 搜索值:<(template_(\w+))>
  • 重置值(value):${${'$2'}}

最终输出如下:

Screenshot of flowfile content after value insertion

关于java - 有没有办法使用 apache nifi 中的处理器从 json 字段中提取值并将该值替换到另一个 json 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56876682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com