更新时间:2024-11-07 GMT+08:00
分享

解析与更新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"
    	}
    }

相关文档