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 ```