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