github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/md/gjson.md (about) 1 ### `gjson()` {#fn-gjson} 2 3 函数原型:`fn gjson(input, json_path: str, newkey: str)` 4 5 函数说明:提取 JSON 中的指定字段,可将其命名成新的字段,并保证按原始顺序排列 6 7 参数: 8 9 - `input`: 待提取 JSON,可以是原始文本(`_`)或经过初次提取之后的某个 `key` 10 - `json_path`: JSON 路径信息 11 - `newkey`:提取后数据写入新 key 12 13 ```python 14 # 直接提取原始输入 JSON 中的 x.y 字段,并可将其命名成新字段 abc 15 gjson(_, "x.y", "abc") 16 17 # 已提取出的某个 `key`,对其再提取一次 `x.y`,提取后字段名为 `x.y` 18 gjson(key, "x.y") 19 20 # 提取数组,`key` 和 `abc` 均为数组类型 21 gjson(key, "1.abc.2") 22 ``` 23 24 示例一: 25 26 ```python 27 # 待处理数据: 28 # {"info": {"age": 17, "name": "zhangsan", "height": 180}} 29 30 # 处理脚本: 31 gjson(_, "info", "zhangsan") 32 gjson(zhangsan, "name") 33 gjson(zhangsan, "age", "age") 34 35 # 处理结果: 36 { 37 "age": 17, 38 "message": "{\"info\": {\"age\": 17, \"name\": \"zhangsan\", \"height\": 180}}", 39 "name": "zhangsan", 40 "zhangsan": "{\"age\":17,\"height\":180,\"name\":\"zhangsan\"}" 41 } 42 ``` 43 44 示例二: 45 46 ```python 47 # 待处理数据: 48 # data = { 49 # "name": {"first": "Tom", "last": "Anderson"}, 50 # "age":37, 51 # "children": ["Sara","Alex","Jack"], 52 # "fav.movie": "Deer Hunter", 53 # "friends": [ 54 # {"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]}, 55 # {"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]}, 56 # {"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]} 57 # ] 58 # } 59 60 # 处理脚本: 61 gjson(_, "name") 62 gjson(name, "first") 63 ``` 64 65 示例三: 66 67 ```python 68 # 待处理数据: 69 # [ 70 # {"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]}, 71 # {"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]}, 72 # {"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]} 73 # ] 74 75 # 处理脚本,json 数组处理: 76 gjson(_, "0.nets.1") 77 ```