字典函数
json_add 函数
函数定义
json 中新增节点。
语法描述
json_add(key,data)
参数说明
参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
key | json 对应的 key | string | 是 | - | - |
data | 补充新的节点 | dict | 是 | - | - |
示例
原始日志:
{"content": "{\\"a\\":{\\"b\\":{\\"c\\":\\"cc\\"}}}"}
加工规则:
json_add("content", {"a":{"b":{"d":"dd"}}})
加工结果:
{"content": "{\\"a\\":{\\"b\\":{\\"c\\":\\"cc\\",\\"d\\":\\"dd\\"}}}"}
json_edit 函数
函数定义
增加/修改/删除字典中的键值对,返回 dict。
语法描述
json_edit("result", path="", key="",value="333",index=1,mode="edit")
参数说明
参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
field | 嵌套 json 对应的 key | string | 是 | - | - |
path | string | 否 | - | - | |
key | 需要删除或修改的目标字段,当对数组元素操作时,无需填写 | string | 否 | - | - |
value | 需要设定的新值,修改值时才需要填写 | string | 否 | - | - |
index | 对数组操作时填写该字段,数组元素从1开始 | number | 否 | 0 | - |
mode | 模式。修改:edit,删除:move,默认 move | string | 否 | move | - |
示例1:修改指定节点的值
原始日志:
{"content":"{\\"p9\\":[\\"0.0\\",\\"0.0\\"],\\"p18\\":\\"CN\\"}","time":"1650440364"}
加工规则:
json_edit("content", path="", key="p18", value="hello", mode="edit")
加工结果:
{"content":"{\\"p9\\":[\\"0.0\\",\\"0.0\\"],\\"p18\\":\\"hello\\"}", "time":"1650440364"}
示例2:修改指定节点的值(多层级)
原始日志:
{"content":"{\\"p9\\":[\\"0.0\\",\\"0.0\\"],\\"p18\\":\\"CN\\",\\"info\\":{\\"province\\":\\"hubei\\",\\"geo\\":{\\"long\\":\\"111\\",\\"lati\\":\\"222\\"}}}","time":"1650440364"}
加工规则:
json_edit("content", path="info.geo", key="long", value="333", mode="edit")
加工结果:
{"content":"{\\"p9\\":[\\"0.0\\",\\"0.0\\"],\\"p18\\":\\"CN\\",\\"info\\":{\\"province\\":\\"hubei\\",\\"geo\\":{\\"long\\":\\"333\\",\\"lati\\":\\"222\\"}}}","time":"1650440364"}
示例3:删除节点
原始日志:
{"content":"{\\"p9\\":[\\"0.0\\",\\"0.0\\"],\\"p18\\":\\"CN\\",\\"info\\":{\\"province\\":\\"hubei\\",\\"geo\\":{\\"long\\":\\"111\\",\\"lati\\":\\"222\\"}}}","time":"1650440364"}
加工规则:
json_edit("content", path="", key="p18", mode="move")
加工结果:
{"content":"{\\"p9\\":[\\"0.0\\",\\"0.0\\"],\\"info\\":{\\"province\\":\\"hubei\\",\\"geo\\":{\\"long\\":\\"111\\",\\"lati\\":\\"222\\"}}}","time":"1650440364"}
示例4:删除节点(数组元素)
原始日志:
{"content":"{\\"p9\\":[\\"0.0\\",\\"0.0\\"],\\"p18\\":\\"CN\\",\\"info\\":{\\"province\\":[\\"hello\\",\\"world\\"],\\"geo\\":{\\"long\\":[\\"1.0\\",\\"2.0\\"],\\"lati\\":\\"222\\"}}}","time":"1650440364"}
加工规则:
json_edit("content", path="info.province", index=1, mode="move")
加工结果:
{"content":"{\\"p9\\":[\\"0.0\\",\\"0.0\\"],\\"p18\\":\\"CN\\",\\"info\\":{\\"province\\":[\\"world\\"],\\"geo\\":{\\"long\\":[\\"1.0\\",\\"2.0\\"],\\"lati\\":\\"222\\"}}}","time":"1650440364"}
json_select 函数
函数定义
通过 JMES表达式,提取 JSON 字段值,并返回 Jmes 提取的节点值(String)。
语法描述
json_select(data, jmes="")
参数说明
参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
data | 字段值,可以通过其他函数提取字段值 | string | 是 | - | - |
jmes | string | 是 | - | - |
示例
原始日志:
{"field": "{\\"a\\":{\\"b\\":{\\"c\\":{\\"d\\":\\"success\\"}}}}", "status": "500"}
加工规则:
fields_set("message", json_select(v("field"), jmes="a.b.c.d"))
加工结果:
{"field":"{\\"a\\":{\\"b\\":{\\"c\\":{\\"d\\":\\"success\\"}}}}","message":"success","status":"500"}
xml_to_json 函数
函数定义
解析 XML 值并转换为 JSON 字符串,输入值必须为 XML 字符串结构,否则会导致转换异常,返回 dict。
语法描述
xml_to_json(data)
参数说明
参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
data | 字段值 | string | 是 | - | - |
示例
原始日志:
{"xml_field": "<note><to>B</to><from>A</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>", "status": "500"}
加工规则:
fields_set("json_field", xml_to_json(v("xml_field")))
加工结果:
{"xml_field":"<note><to>B</to><from>A</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>","json_field":"{\\"to\\":\\"B\\",\\"from\\":\\"A\\",\\"heading\\":\\"Reminder\\",\\"body\\":\\"Don't forget me this weekend!\\"}","status":"500"}
json_to_xml 函数
函数定义
解析 JSON 字符串值并转换为 XML 字符串,返回 String。
语法描述
json_to_xml(data)
参数说明
参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
data | 字段值 | string | 是 | - | - |
示例
原始日志:
{"json_field":"{\\"to\\":\\"B\\",\\"from\\":\\"A\\",\\"heading\\":\\"Reminder\\",\\"body\\":\\"Don't forget me this weekend!\\"}", "status": "200"}
加工规则:
fields_set("xml_field", json_to_xml(v("json_field")))
加工结果:
{"json_field":"{\\"to\\":\\"B\\",\\"from\\":\\"A\\",\\"heading\\":\\"Reminder\\",\\"body\\":\\"Don't forget me this weekend!\\"}","xml_field":"<ObjectNode><to>B</to><from>A</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></ObjectNode>","status":"200"}
if_json 函数
函数定义
判断是否为 JSON 字符串,返回 TRUE/FALSE。
语法描述
if_json(data)
参数说明
参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
data | 字段值 | string | 是 | - | - |
示例
示例1
原始日志:
{"condition":"{\\"a\\":\\"b\\"}","status":"500"}
加工语句:
t_if(if_json(v("condition")), fields_set("new", 1))
加工结果:
{"new":"1","condition":"{\\"a\\":\\"b\\"}","status":"500"}
示例2
原始日志:
{"condition":"haha","status":"500"}
加工语句:
t_if(if_json(v("condition")), fields_set("new", 1))
加工结果:
{"condition":"haha","status":"500"}
列表函数
array_get 函数
函数定义
获取数组的值,返回 String。
语法描述
array_get(数组,下标位置)
参数说明
参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
数组 | 数组 | string | 是 | - | - |
下标位置 | 取数组第几个值 | int | 是 | - | - |
示例1
原始日志:
{"field1": "[1,2,3]"}
加工规则:
fields_set("field2", array_get(v("field1"), 0))
加工结果:
{"field1":"[1,2,3]","field2":"1"}
示例2
原始日志:
{"field1": "['tom','jerry','bobo']"}
加工规则:
fields_set("field2", array_get(v("field1"), 0))
加工结果:
{"field1":"['tom','jerry','bobo']","field2":"tom"}