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

如何在Bash脚本中遍历并处理独立JSON块

处理Bash中多个独立JSON对象的遍历问题

当你用jq处理后得到多个独立的JSON对象(每个以{}包裹),命令替换无法完整保留每个JSON块的结构,这里提供两种实用的解决方法:

方法一:单行输出+进程替换循环

先确保jq输出的每个JSON对象是单行格式(用-c参数压缩输出),再通过进程替换让while循环逐行读取完整的JSON块:

# 替换成你的实际jq命令,比如从文件提取多个对象
jq_command='jq -c ".items[]" data.json'

while read -r json_block; do
  # 这里编写你的处理逻辑,比如提取字段
  echo "处理的JSON块:"
  echo "$json_block" | jq '.title'
  
  # 其他操作示例:将JSON块传递给API请求
  # curl -X POST -H "Content-Type: application/json" -d "$json_block" https://example.com/api
done < <(eval "$jq_command")

原理说明

  • jq -c 将每个JSON对象压缩为单行,避免换行导致的结构分割问题
  • 进程替换< <(...) 直接将jq的输出作为while循环的输入,逐行读取每个完整的JSON块,不会像命令替换那样把换行符合并为空格

方法二:处理多行格式化的JSON块

如果jq输出的是格式化后的多行JSON对象,可以用awk分割每个{}包裹的块,再循环读取:

awk '
  /^{/ { in_block=1; buffer="" }
  in_block { buffer=buffer $0 "\n" }
  /^}/ { in_block=0; printf "%s\0", buffer }
' data.json | while read -d '' -r json_block; do
  # 处理每个完整的JSON块
  echo "$json_block" | jq '.description'
done

原理说明

  • awk负责识别每个JSON块的起始({)和结束(}),收集完整的块后用空字符(\0)分隔输出
  • read -d '' 以空字符作为分隔符读取,确保即使JSON块包含换行也能完整读取

内容的提问来源于stack exchange,提问作者unbox-us

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:40:26