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

Bash使用jq解析JSON存数组后遍历出现死循环问题排查

存在的问题

  • while read 循环未指定输入文件源,read 命令会持续等待标准输入,表现为无限卡住的异常状态
  • idd、username 被定义为普通变量而非数组,每次循环都会覆盖上一次的取值,后续按数组遍历的逻辑完全无法生效
  • 你的JSON文件是多个独立JSON对象拼接的非标准格式,按行读取的逻辑无法拿到完整的单个JSON结构,直接调用jq解析会报错

修正方案

如果可以调整JSON文件,建议先把多个对象包为标准JSON数组,降低解析复杂度:

[
    {
      "id": 5679162,
      "username": "ryderw1"
    },
    {
      "id": 5679163,
      "username": "ryderw3"
    },
    {
      "id": 5679164,
      "username": "ryderw4"
    }
]

如果无法修改原JSON文件,可直接用jq的-n参数配合inputs读取流格式的多个JSON对象,无需修改原文件,修正后的代码如下:

#!/bin/bash
test(){
    local file="/Users/f.json"
    if [ ! -f "$file" ]; then
        echo "absent"
        return 1
    fi
    echo "present"
    
    # 直接读取所有id存入数组
    local -a idd=($(jq -n -r 'inputs.id' "$file"))
    
    # 遍历输出
    for id in "${idd[@]}"; do
        echo "$id"
    done
}
test

如果需要同时存储username字段,只需用jq同时提取两个字段后逐行存入对应数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 05:54:02