使用jq在JSON数组中实现name字段字符串替换的方法求助
解决方案
不需要借助bash函数,直接用jq内置的gsub()全局替换函数就能实现需求,它可以直接在jq内部完成字符串替换操作,无需调用外部shell函数。
核心jq命令
根据你的JSON结构选择对应命令:
- 如果你的JSON是直接的数组(如示例所示):
jq '.[].name |= gsub("\\."; "-")' - 如果你的JSON是包含
data字段的结构(如脚本中.data所示):jq '.data[].name |= gsub("\\."; "-")'
完整脚本示例
URL="你的目标地址" RAW=$(curl "${URL}") # 直接用jq处理JSON,替换name字段中的句号为连字符 echo "${RAW}" | jq '.data[].name |= gsub("\\."; "-")'
命令说明
.[].name:遍历数组中的每个对象,定位到name字段|=:更新字段值,将替换后的结果赋值回原字段gsub("\\."; "-"):全局替换字符串中的.(注意正则中.是特殊字符,需要用\\转义)为-
验证示例
将你的示例JSON输入命令:
echo '[ {"id":"1","name":"a.a"}, {"id":"2","name":"b.b"}, {"id":"3","name":"c.c"} ]' | jq '.[].name |= gsub("\\."; "-")'
会输出期望结果:
[ { "id": "1", "name": "a-a" }, { "id": "2", "name": "b-b" }, { "id": "3", "name": "c-c" } ]
内容的提问来源于stack exchange,提问作者adityaViswanatham
相关产品推荐
相关产品推荐

