解析与更新JSON数据
本文介绍如何使用数据加工对包含JSON对象的日志进行解析与更新。
场景一:展开和提取JSON对象
日志中包含JSON对象时,您可以通过e_json函数展开和提取对象。
示例:指定字段名精确提取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" } }
场景二:提取JSON对象值
日志中包含JSON对象时,您可以通过dct_get函数提取JSON对象值。
例如,提取JSON对象中的键值对"k1":"v1",并将键名更改为key1。
- 原始日志
{ "data": {"k1":"v1","k2":"v2"} }
- 加工规则
e_set("key1", dct_get(v("data"), "k1"))
- 加工结果
{ "key1": "v1", "data": { "k1": "v1", "k2": "v2" } }
场景三:更新JSON对象值
日志中包含JSON对象时,您可以通过dct_update函数更新JSON对象值。
例如,修改JSON对象中k1的值。
- 原始日志
{ "data": { "k1": "k1", "k2": "v2" } }
- 加工规则
e_set("data", dct_update(v("data"), {"k1": "new_k1"}))
- 加工结果
{ "data": { "k1": "new_k1", "k2": "v2" } }
场景四:删除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" } }