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

如何用Shell脚本提取JSON中两个数组并合并为CSV格式?

合并JSON中两个数组为CSV格式(Shell脚本实现)

需求说明

需要从JSON数据里的两个独立数组(Defaults.Timestamps和MetricDataForAccount[0].Values)按对应位置配对,输出成Excel可直接打开的CSV格式。

示例JSON数据

{
  "Defaults": {
    "Timestamps": [
      1677801540,
      1677801480,
      1677801420
    ]
  },
  "MetricDataForAccount": [
    {
      "Values": [
        2920126.416862745,
        2920285.9993725484,
        2920305.409303922
      ]
    }
  ]
}

原命令及问题

原使用的jq命令:

jq -r '. | "\(.Defaults.Timestamps) \(.MetricDataForAccount[].Values)"'

输出仅原样打印两个数组,无法实现元素配对:

Output [1677801540,1677801480,1677801420] [2920126.416862745,2920285.9993725484,2920305.409303922]

预期输出

1677801540, 2920126.416862745
1677801480, 2920285.9993725484
1677801420, 2920305.409303922

解决方案

方法1:标准CSV格式输出

使用以下jq命令,生成符合CSV规范的输出,确保Excel可直接识别:

jq -r '.Defaults.Timestamps as $ts | .MetricDataForAccount[0].Values as $vals | [$ts, $vals] | transpose[] | @csv'

命令说明

  • .Defaults.Timestamps as $ts:将时间戳数组存入变量$ts
  • .MetricDataForAccount[0].Values as $vals:将数值数组存入变量$vals
  • [$ts, $vals]:把两个数组包装成二维数组
  • transpose[]:转置二维数组,让两个数组的对应元素组成子数组
  • @csv:将子数组格式化为标准CSV行

方法2:完全匹配预期格式输出

如果需要严格保留数值前的空格,可使用索引遍历的方式:

jq -r '.Defaults.Timestamps as $ts | .MetricDataForAccount[0].Values as $vals | range(0; $ts|length) | "\($ts[.]), \($vals[.])"'

命令说明

  • range(0; $ts|length):遍历数组的索引范围
  • "\($ts[.]), \($vals[.])":按索引取出对应位置的元素,拼接成指定格式的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:53:12