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

如何在Bash中遍历含空格字符的JSON对象数组

解决Bash中遍历含空格的JSON对象数组问题

问题出在Bash默认的分词规则上:如果直接用array=($(jq -c '.[]' response.json))这种方式赋值,Bash会把输出内容按空格、换行等分隔符拆分,导致带空格的JSON对象被拆成多个数组元素。

下面是两种可靠的解决方法:

方法一:用mapfile(readarray)预存数组

mapfile命令会按行读取输入,将每一行作为数组的一个独立元素,完全忽略行内的空格:

# 从API响应或本地JSON文件读取对象数组,存入Bash数组
mapfile -t json_objects < <(jq -c '.[]' response.json)

# 遍历数组处理每个对象
for obj in "${json_objects[@]}"; do
    # 提取displayName字段示例
    display_name=$(echo "$obj" | jq -r '.displayName')
    echo "当前对象的显示名称:$display_name"
    echo "完整JSON对象:$obj"
done
  • -t选项会去掉每行末尾的换行符,避免对象里多出来不必要的换行
  • < <(...)是进程替换,让mapfile直接读取jq命令的输出

方法二:用while read循环边读边处理

如果JSON数组很大,不想占用太多内存预存整个数组,可以用while循环逐行读取:

# 直接遍历jq输出的每一行
jq -c '.[]' response.json | while IFS= read -r obj; do
    display_name=$(echo "$obj" | jq -r '.displayName')
    echo "显示名称:$display_name"
    echo "完整对象:$obj"
done
  • IFS=确保read不会忽略行首或行尾的空格
  • -r禁止read解析转义字符,保证JSON内容的完整性

这两种方法都能保证每个JSON对象作为一个整体被处理,不会因为字段含空格而拆分。

内容的提问来源于stack exchange,提问作者Weili Gao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:09