You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:15:41