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

如何用jq将JSON转换为CSV?解决数组索引报错问题

解决Open-Meteo API JSON转CSV的jq错误问题

尝试用jq将Open-Meteo API返回的JSON转换为指定CSV时,遇到错误:error (at <stdin>:0): Cannot index array with string "time"。以下是相关信息及解决方案:

JSON数据示例

{
  "latitude": 52.52,
  "longitude": 13.419998,
  "generationtime_ms": 0.23293495178222656,
  "utc_offset_seconds": 7200,
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "CEST",
  "elevation": 38.0,
  "daily_units": {
    "time": "iso8601",
    "weather_code": "wmo code",
    "temperature_2m_max": "°F",
    "temperature_2m_min": "°F",
    "precipitation_probability_max": "%"
  },
  "daily": {
    "time": [
      "2024-10-13",
      "2024-10-14"
    ],
    "weather_code": [
      80,
      61
    ],
    "temperature_2m_max": [
      52.7,
      53.1
    ],
    "temperature_2m_min": [
      48.6,
      43.7
    ],
    "precipitation_probability_max": [
      100,
      10
    ]
  }
}

期望CSV格式

time,weather_code,temperature_2m_max,temperature_2m_min,precipitation_probability_max
2024-10-13,80,52.7,48.6,100
2024-10-14,61,53.1,43.7,10

当前使用的命令

curl -s "https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41&daily=weather_code,temperature_2m_max,temperature_2m_min,precipitation_probability_max&temperature_unit=fahrenheit&wind_speed_unit=mph&precipitation_unit=inch&timezone=auto&forecast_days=14" | 

jq -r '
  [
    "date", "weather_code", "temperature_2m_max", "temperature_2m_min", "precipitation_probability_max"
  ],
  .daily |
  [
    .time[],
    .weather_code[],
    .temperature_2m_max[],
    .temperature_2m_min[],
    .precipitation_probability_max[]
  ]
  | @csv
'

错误原因

当前命令的核心问题是处理.daily数据的逻辑错误:直接将各个字段的数组元素平铺成一个一维数组,而非按日期对应生成每行数据。这种结构会导致jq无法正确解析字段关联关系,进而抛出索引错误。另外表头的date与期望的time不匹配。

修正后的命令

curl -s "https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41&daily=weather_code,temperature_2m_max,temperature_2m_min,precipitation_probability_max&temperature_unit=fahrenheit&wind_speed_unit=mph&precipitation_unit=inch&timezone=auto&forecast_days=14" |
jq -r '
  ["time", "weather_code", "temperature_2m_max", "temperature_2m_min", "precipitation_probability_max"] | @csv,
  .daily | [.time, .weather_code, .temperature_2m_max, .temperature_2m_min, .precipitation_probability_max] | transpose[] | @csv
'

命令说明

  1. 先输出匹配期望格式的表头,通过@csv转为CSV格式。
  2. 将.daily下需要的字段数组放入一个二维数组,用transpose转置数组——把原本按字段分组的结构转为按日期分组的结构,每个子数组对应一行数据。
  3. 遍历转置后的每个子数组,用@csv转为CSV行,最终得到符合要求的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:55:17