github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/md/json.md (about)

     1  ### `json()` {#fn-json}
     2  
     3  函数原型:`fn json(input: str, json_path, newkey, trim_space: bool = true, delete_after_extract = false)`
     4  
     5  函数说明:提取 JSON 中的指定字段,并可将其命名成新的字段。
     6  
     7  参数:
     8  
     9  - `input`: 待提取 JSON,可以是原始文本(`_`)或经过初次提取之后的某个 `key`
    10  - `json_path`: JSON 路径信息
    11  - `newkey`:提取后数据写入新 key
    12  - `trim_space`: 删除提取出的字符中的空白首尾字符,默认值为 `true`
    13  - `delete_after_extract`: 在提取结束后删除当前对象,在重新序列化后回写待提取对象;只能应用于 map 的 key 与 value 的删除,不能用于删除 list 的元素;默认值为 `false`,不进行任何操作
    14  
    15  ```python
    16  # 直接提取原始输入 JSON 中的 x.y 字段,并可将其命名成新字段 abc
    17  json(_, x.y, abc)
    18  
    19  # 已提取出的某个 `key`,对其再提取一次 `x.y`,提取后字段名为 `x.y`
    20  json(key, x.y) 
    21  ```
    22  
    23  示例一:
    24  
    25  ```python
    26  # 待处理数据:
    27  # {"info": {"age": 17, "name": "zhangsan", "height": 180}}
    28  
    29  # 处理脚本:
    30  json(_, info, "zhangsan")
    31  json(zhangsan, name)
    32  json(zhangsan, age, "age")
    33  
    34  # 处理结果:
    35  {
    36    "age": 17,
    37    "message": "{\"info\": {\"age\": 17, \"name\": \"zhangsan\", \"height\": 180}}",
    38    "name": "zhangsan",
    39    "zhangsan": "{\"age\":17,\"height\":180,\"name\":\"zhangsan\"}"
    40  }
    41  ```
    42  
    43  示例二:
    44  
    45  ```python
    46  # 待处理数据:
    47  #    data = {
    48  #        "name": {"first": "Tom", "last": "Anderson"},
    49  #        "age":37,
    50  #        "children": ["Sara","Alex","Jack"],
    51  #        "fav.movie": "Deer Hunter",
    52  #        "friends": [
    53  #            {"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
    54  #            {"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
    55  #            {"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
    56  #        ]
    57  #    }
    58  
    59  # 处理脚本:
    60  json(_, name)
    61  json(name, first)
    62  ```
    63  
    64  示例三:
    65  
    66  ```python
    67  # 待处理数据:
    68  #    [
    69  #            {"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
    70  #            {"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
    71  #            {"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
    72  #    ]
    73      
    74  # 处理脚本,json 数组处理:
    75  json(_, .[0].nets[-1])
    76  ```
    77  
    78  示例四:
    79  
    80  ```python
    81  # 待处理数据:
    82  {"item": " not_space ", "item2":{"item3": [123]}}
    83  
    84  # 处理脚本:
    85  json(_, item2.item3, item, delete_after_extract = true)
    86  
    87  # 输出:
    88  {
    89    "item": "[123]",
    90    "message": "{\"item\":\" not_space \",\"item2\":{}}",
    91  }
    92  ```
    93  
    94  
    95  示例五:
    96  
    97  ```python
    98  # 待处理数据:
    99  {"item": " not_space ", "item2":{"item3": [123]}}
   100  
   101  # 处理脚本:
   102  # 如果尝试删除列表元素将无法通过脚本检查
   103  json(_, item2.item3[0], item, true, true)
   104  
   105  # 本地测试命令:
   106  # datakit pipeline -P j2.p -T '{"item": " not_space ", "item2":{"item3": [123]}}'
   107  # 报错:
   108  # [E] j2.p:1:37: does not support deleting elements in the list
   109  ```