如何用Shell脚本jq动态解析JSON数组键名并遍历
使用Shell脚本结合jq解析JSON键名并遍历
步骤1:解析JSON生成逗号分隔的键名字符串
利用jq的keys函数提取JSON的顶级键名,再通过join(",")拼接成逗号分隔的字符串,直接赋值给key_list变量:
如果JSON数据保存在文件(比如data.json)中,执行命令:
key_list=$(jq -r '. | keys | join(",")' data.json)
如果要直接处理内嵌的JSON字符串,可写为:
json_data='{ "product": [{"productID": "123", "productName": "test1"}], "inventory": [{"id": "12093", "name": "adie"}], "rating": [{"value": "4", "status": "done"}], "review": [{"desc": "good", "comments": "test"}] }' key_list=$(echo "$json_data" | jq -r '. | keys | join(",")')
执行后key_list的值即为product,inventory,rating,review。
步骤2:遍历键名字符串
设置IFS(内部字段分隔符)为逗号,将字符串转换为数组后用for循环逐个遍历:
IFS=',' read -ra keys <<< "$key_list" for key in "${keys[@]}"; do echo "$key" # 可在此添加其他操作,比如根据键名提取对应JSON数据:jq -r ".${key}" data.json done
完整脚本示例
#!/bin/bash # 从JSON文件生成键名字符串 key_list=$(jq -r '. | keys | join(",")' data.json) # 遍历并打印每个键名 IFS=',' read -ra keys <<< "$key_list" for key in "${keys[@]}"; do echo "$key" done
执行脚本后输出结果:
product inventory rating review
关键说明
jq -r:-r参数输出原始字符串(不带引号),避免键名被双引号包裹。. | keys:.指代整个JSON对象,keys提取该对象的所有顶级键名,返回数组格式。join(","):将键名数组拼接为逗号分隔的字符串。IFS=',' read -ra keys:将逗号分隔的字符串转换为数组,便于循环遍历。
内容的提问来源于stack exchange,提问作者Brady Maf
相关产品推荐
相关产品推荐

