如何编写JQ命令从JSON带序号姓名字符串中提取内容生成数组?
JQ命令实现方案
以下命令可以直接完成需求中的JSON转换,保留原有结构仅替换目标字段:
jq '.doc |= map(if has("cNames") then (. + {cNameArray: (.cNames | gsub("^\\s+|\\s+$";"") | split("\\s*[0-9]+\\s*") | map(select(length > 0)))} | del(.cNames)) else . end)'
命令逻辑说明
- 首先遍历
doc数组的所有元素,对不存在cNames字段的元素直接保留不做修改 - 对包含
cNames的元素:- 先去除
cNames字符串首尾的多余空白 - 按「数字+数字前后任意空白」的规则拆分字符串
- 过滤拆分结果中产生的空字符串,得到纯姓名数组
- 先去除
- 新增
cNameArray字段后删除原始的cNames字段,其余字段完全保留
内容的提问来源于stack exchange,提问作者Nva
相关产品推荐
相关产品推荐

