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

如何使用jq将AWS导出的JSON转换为含自定义字段与标签的指定格式CSV并支持追加写入

解决AWS JSON数据转指定格式CSV的问题

你现在的jq命令输出的是JSON对象,而非符合要求的CSV行,而且没正确把Tags展开到对应列里。咱们一步步修正这个问题:

核心问题分析

当前命令的几个关键问题:

  • 用{}生成了JSON对象,导致输出带大括号和键名
  • 没有把Tags里的Key映射为CSV的列,而是把Tags打包成了一个字符串
  • 没有生成你指定的表头

正确的jq命令实现

1. 首次生成完整CSV(含表头)

如果是第一次处理,先写入表头再处理数据:

# 先写入指定表头
echo "id,vol,state,size,colour,shape,weight" > test.csv

# 处理JSON数据并追加到CSV
cat test.json | jq -r '
  .[] | 
  [
    .InstanceId,
    .Vol,
    .State,
    (.Tags | from_entries | .Size),
    (.Tags | from_entries | .Colour),
    (.Tags | from_entries | .Shape),
    (.Tags | from_entries | .Weight)
  ] | @csv
' >> test.csv

2. 循环追加资源时避免重复表头

如果要批量处理多个AWS资源文件,先检查CSV是否存在,不存在才写入表头,之后只追加数据行:

# 检查文件是否存在,不存在则写入表头
[ ! -f test.csv ] && echo "id,vol,state,size,colour,shape,weight" > test.csv

# 处理当前JSON数据并追加到CSV
cat test.json | jq -r '
  .[] | 
  [
    .InstanceId,
    .Vol,
    .State,
    (.Tags | from_entries | .Size),
    (.Tags | from_entries | .Colour),
    (.Tags | from_entries | .Shape),
    (.Tags | from_entries | .Weight)
  ] | @csv
' >> test.csv

命令细节解释

  • -r参数:让jq输出原始字符串,避免额外的引号包裹
  • .[]:遍历JSON数组里的每一个资源对象
  • (.Tags | from_entries):把Tags数组转换成键值对对象(比如{"Size": "large", ...}),这样就能直接通过键名取值
  • [ ... ]:把需要的字段按表头顺序组合成数组
  • @csv:把数组格式化为符合CSV规范的行,自动处理特殊字符的引号包裹

最终输出效果

运行后test.csv的内容会是:

id,vol,state,size,colour,shape,weight
"I-1234","vol-5678","in-use","large","red","square","light"

用Excel打开后会自动对应到每一列,完全符合你要求的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:27:33