
# 特定结构化数据函数
本文介绍特定结构化数据函数的语法规则，包括参数解释、函数示例等。
| 类型   | 函数                                                                                                                                       | 说明                         |
|:---|:---|:---|
| JSON | [json_select]  | 根据JMES语法提取或计算JSON表达式中特定的值。 |
| JSON | [json_parse] | 将值解析为JSON对象。               |
| XML  | [xml_to_json] | 将xml数据转成JSON数据。            |
   
 #### json_select
根据JMES语法提取或计算JSON表达式中特定的值。
- **函数格式**
  ```
  json_select(value, jmes, default=None, restrict=false)
  ```
  
- **参数说明**
  
  |  **参数**  |   **类型**    | **是否必填** |                                                                                                                                                                                                                                                                                                                                                                                                              **说明**                                                                                                                                                                                                                                                                                                                                                                                                              |
  |---|---|---|---|
  | value    | String、JSON | 是        | 传入待提取字段的JSON表达式或字段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | jmes     | String      | 是        | JMES表达式，表示提取的字段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
  | default  | String      | 否        | 如果提取字段不存在，则返回此处设置的值。默认为None，表示不返回字段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
  | restrict | Bool        | 否        | 提取字段的值不是合法的JSON格式时，是否严格限制加工。 默认值false。 - false：忽略报错，数据加工继续处理，返回default定义的值。  - true：直接报错，数据加工不再继续处理，直接丢弃该条日志。   |
     
  
- **返回结果**
  返回提取到的值。
  
- **函数示例**
  1. 示例1：从content字段提取元素name的值。
     - 测试数据
       ```
       {
         "content":  {"name": "xiaoming", "age": 10}
       }
       ```
       
     
     - 加工规则
       ```
       e_set("json_filter",json_select(v("content"), "name"))
       ```
       
     
     - 加工结果
       ```
       content:  {"name": "xiaoming", "age": 10}
       json_filter:  xiaoming
       ```
       
      
  
  2. 示例2：从content字段提取元素name包含的所有值。
     - 测试数据
       ```
       {
         "content":  {"name": ["xiaoming", "xiaowang", "xiaoli"], "age": 10}
       }
       ```
       
     
     - 加工规则
       ```
       e_set("json_filter", json_select(v("content"), "name[*]"))
       ```
       
     
     - 加工结果
       ```
       content:  {"name": ["xiaoming", "xiaowang", "xiaoli"], "age": 10}
       json_filter:  ["xiaoming", "xiaowang", "xiaoli"]
       ```
       
      
  
  3. 示例3：从content字段提取元素name3的值，若字段不存在，则返回default的值。
     - 测试数据
       ```
       {
         "content":  {"name": "xiaoming", "age": 10}
       }
       ```
       
     
     - 加工规则
       ```
       e_set("json_filter", json_select(v("content"), "name3", default="None"))
       ```
       
     
     - 加工结果
       ```
       content:  {"name": "xiaoming", "age": 10}
       json_filter: None
       ```
       
      
  
  4. 示例4：从content字段提取携带短划线（-）的元素name-test的值。
     - 测试数据
       ```
       {
         "content":  {"name": {"name-test":"xiaoming"}, "age": 10}
       }
       ```
       
     
     - 加工规则
       ```
       e_set("json_filter", json_select(v("content"), 'name."name-test"', default=None))
       ```
       
     
     - 加工结果
       ```
       content:  {"name": {"name-test":"xiaoming"}, "age": 10}
       json_filter: xiaoming
       ```
       
      
  
  5. 示例5：从content字段提取携带短划线（-）的元素name-test的值，若元素不存在，则不返回字段。
     - 测试数据
       ```
       {
         "content":  {"name": {"name.test":"xiaoming"}, "age": 10}
       }
       ```
       
     
     - 加工规则
       ```
       e_set("json_filter", json_select(v("content"), 'name."name-test"', default=None))
       ```
       
     
     - 加工结果
       ```
       content:{"name":{"name.test":"xiaoming"},"age":10}
       ```
       
      
   
 
 #### json_parse
将值解析为JSON对象。
- **函数格式**
  ```
  json_parse(value, default=None, restrict=false)
  ```
  
- **参数说明**
  
  |  **参数**  | **类型** | **是否必填** |                                                                                                                                                                                                                                                                                                                                                                                                              **说明**                                                                                                                                                                                                                                                                                                                                                                                                              |
  |---|---|---|---|
  | value    | String | 是        | 传入需要被解析的字段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
  | default  | String | 否        | 如果解析字段不存在，则返回此处设置的值。默认为None，表示不返回字段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
  | restrict | Bool   | 否        | 解析字段的值不是合法的JSON格式时，是否严格限制加工。 默认值false。 - false：忽略报错，数据加工继续处理，返回default定义的值。  - true：直接报错，数据加工不再继续处理，直接丢弃该条日志。   |
     
  
- **返回结果**
  返回转换后的JSON对象。
  
- **函数示例**
  1. 示例1：提取content字段的JSON值。
     - 测试数据
       ```
       {
         "content":  {"abc": 123, "xyz": "test" }
       }
       ```
       
     
     - 加工规则
       ```
       e_set("json", json_parse(v("content")))
       ```
       
     
     - 加工结果
       ```
       content:  {"abc": 123, "xyz": "test" }
       json:  {"abc": 123, "xyz": "test"}
       ```
       
      
  
  2. 示例2：提取content字段的值，如果不是JSON格式，则返回default的值。
     - 测试数据
       ```
       {
         "content": "this is not json"
       }
       ```
       
     
     - 加工规则
       ```
       e_set("json", json_parse(v("content"), default="FFF", restrict=false))
       ```
       
     
     - 加工结果
       ```
       content: this is not json
       json: FFF
       ```
       
      
   
 
 #### xml_to_json
将xml数据转成JSON数据。
- **函数格式**
  ```
  xml_to_json(source)
  ```
  
- **参数说明**
  
  | **参数** | **类型** | **是否必填** |   **说明**    |
  |---|---|---|---|
  | source | String | 是        | 传入需要被转换的字段。 |
     
  
- **返回结果**
  返回转换后的JSON数据。
  
- **函数示例**
  - 测试数据
    ```
    {
      "str": "<data><country name=\"Liechtenstein\"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor name=\"Austria\" direction=\"E\"/><neighbor name=\"Switzerland\" direction=\"W\"/></country><country name=\"Singapore\"><rank>4</rank><year>2011</year><gdppc>59900</gdppc><neighbor name=\"Malaysia\" direction=\"N\"/></country><country name=\"Panama\"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name=\"Costa Rica\" direction=\"W\"/><neighbor name=\"Colombia\" direction=\"E\"/></country></data>"
    }
    ```
    
  
  - 加工规则
    ```
    e_set("str_json",xml_to_json(v("str")))
    ```
    
  
  - 加工结果
    ```
    str:<data><country name="Liechtenstein"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank>4</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country></data>
    str_json:{"data": {"country": [{"@name": "Liechtenstein", "rank": "1", "year": "2008", "gdppc": "141100", "neighbor": [{"@name": "Austria", "@direction": "E"}, {"@name": "Switzerland", "@direction": "W"}]}, {"@name": "Singapore", "rank": "4", "year": "2011", "gdppc": "59900", "neighbor": {"@name": "Malaysia", "@direction": "N"}}, {"@name": "Panama", "rank": "68", "year": "2011", "gdppc": "13600", "neighbor": [{"@name": "Costa Rica", "@direction": "W"}, {"@name": "Colombia", "@direction": "E"}]}]}}
    ```
    
   
 
