本文介绍如何使用数据加工对包含JSON对象的日志进行解析与更新。
场景一:展开和提取JSON对象
日志中包含JSON对象时,您可以通过e_json函数展开和提取对象。
示例1:展开一层JSON
例如,展开data
字段值中的第一层键值对。
原始日志
data: {"k1": "v1", "k2": {"k3": "v3", "k4": "v4"}}
加工规则
e_json("data", depth=1)
加工结果
data: {"k1": "v1", "k2": {"k3": "v3", "k4": "v4"}} k1: v1 k2: {"k3": "v3", "k4": "v4"}
示例2:完全展开JSON对象
例如,完全展开data
字段值中的各层键值对。
原始日志
data: {"k1": "v1", "k2": {"k3": "v3", "k4": "v4"}}
加工规则
e_json("data")
加工结果
data:{"k1": "v1", "k2": {"k3": "v3", "k4": "v4"}} k1:v1 k3:v3 k4:v4
示例3:指定字段名精确提取JSON对象值
指定JSON对象中的键名,精确提取目标键值对。
原始日志
data: { "foo": { "bar": "baz" }, "peoples": [{ "name": "xh", "sex": "girl" }, { "name": "xm", "sex": "boy" }] }
加工规则
e_json("data", jmes="foo", output="foo") e_json("data", jmes="foo.bar", output="bar") e_json("data", jmes="peoples[0].name", output="name") e_json("data", jmes="peoples[*].name", output="names")
加工结果
data:{"foo": {"bar": "baz"}, "peoples": [{"name": "xh", "sex": "girl"}, {"name": "xm", "sex": "boy"}]} foo:{"bar": "baz"} bar:baz name:xh names:["xh", "xm"]
场景二:提取JSON对象值
日志中包含JSON对象时,您可以通过dct_get函数提取JSON对象值。
示例1:JSON对象包含目标字段
例如,提取JSON对象中的键值对"k1":"v1"
,并将键名更改为key1
。
原始日志
data: {"k1":"v1","k2":"v2"}
加工规则
e_set("key1", dct_get(v("data"), "k1"))
加工结果
data:{"k1": "v1", "k2": "v2"} key1:v1
示例2:JSON对象不包含目标字段
例如,提取JSON对象中的键值对,当目标键不存在时,新增一个键key3
,并使用默认值为其赋值。
原始日志
data: {"k1":"v1","k2":"v2"}
加工规则
e_set("key3", dct_get(v("data"), "k3", default="default"))
加工结果
data:{"k1": "v1", "k2": "v2"} key3:default
场景三:更新JSON对象值
日志中包含JSON对象时,您可以通过dct_update函数更新JSON对象值。
示例1:修改JSON对象值
例如,修改JSON对象中k1
的值。
原始日志
data: {"k1":"v1","k2":"v2"}
加工规则
e_set("data", dct_update(v("data"), {"k1": "new_k1"}))
加工结果
data:{"k1": "new_k1", "k2": "v2"}
示例2:为JSON对象增加键值对
例如,在JSON对象中新增键值对"k3": "k3"
。
原始日志
data: {"k1":"v1","k2":"v2"}
加工规则
e_set("data", dct_update(v("data"), {"k3": "k3"}))
加工结果
data:{"k1": "v1", "k2": "v2", "k3": "k3"}
场景四:删除JSON对象值
日志中包含JSON对象时,您可以通过dct_delete函数删除JSON对象值。
例如,删除JSON对象中的键值对"k1":"v1"
、"k2":"v2"
。
原始日志
data: {"k1":"v1","k2":"v2", "k3": "v3"}
加工规则
e_set("data", dct_delete(v("data"), "k1", "k2"))
加工结果
data:{"k3": "v3"}
场景五:将值解析为JSON对象
您可以使用json_parse函数将字符串解析为JSON对象。
例如,data
字段值为字符串,您可以将其转换为JSON对象。
原始日志
data: "pre{ \"k1\": \"v1\", \"k2\": \"v2\"}"
加工规则
e_set("json_object", json_parse(op_slice(v("data"), 3, 28)))
加工结果
data:pre{ "k1": "v1", "k2": "v2"} json_object:{"k1": "v1", "k2": "v2"}
文档内容是否对您有帮助?