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

如何用jq批量更新JSON文件中的日期(含增量计算与替换)

JSON日期批量更新脚本(GitLab流水线兼容)

核心需求

  • 提取metadata.modelrun_utc的原日期,替换为当日UTC日期,同时计算原时间与当日基准时间(00:00:00 UTC)的秒级时间差delta
  • 将metadata.modelrun_updatetime_utc的日期部分替换为当日UTC日期,保留原时间部分不变
  • 给data_1h.time数组中的所有时间字符串加上delta秒,生成新的ISO格式时间

输入JSON示例

{
  "metadata": {
    "modelrun_utc": "2024-05-20T00:00:00Z",
    "modelrun_updatetime_utc": "2024-05-20T12:34:56Z"
  },
  "data_1h": {
    "time": [
      "2024-05-20T01:00:00Z",
      "2024-05-20T02:00:00Z",
      "2024-05-20T03:00:00Z"
    ]
  }
}

可执行Shell脚本

#!/bin/bash

# 确保jq已安装(根据GitLab runner镜像调整安装命令)
# Debian/Ubuntu 环境:
# apt-get update && apt-get install -y jq
# Alpine 环境:
# apk add --no-cache jq

# 获取当日UTC日期(YYYY-MM-DD)及基准时间(00:00:00 UTC)
TODAY_UTC=$(date -u +%Y-%m-%d)
TODAY_BASE="${TODAY_UTC}T00:00:00Z"

# 处理JSON文件:input.json为源文件,output.json为输出文件
jq --arg today_base "$TODAY_BASE" --arg today_utc "$TODAY_UTC" '
  # 计算时间差delta(秒):当日基准时间 - 原modelrun_utc时间
  ($today_base | fromdateiso8601) - (.metadata.modelrun_utc | fromdateiso8601) as $delta
  # 更新modelrun_utc为当日基准时间
  | .metadata.modelrun_utc = $today_base
  # 替换modelrun_updatetime_utc的日期部分,保留原时间
  | .metadata.modelrun_updatetime_utc = ($today_utc + (.metadata.modelrun_updatetime_utc | split("T")[1]))
  # 批量更新data_1h.time数组的每个时间
  | .data_1h.time |= map( (fromdateiso8601 + $delta) | todateiso8601 )
' input.json > output.json

期望输出示例(当日为2024-06-10时)

{
  "metadata": {
    "modelrun_utc": "2024-06-10T00:00:00Z",
    "modelrun_updatetime_utc": "2024-06-10T12:34:56Z"
  },
  "data_1h": {
    "time": [
      "2024-06-10T01:00:00Z",
      "2024-06-10T02:00:00Z",
      "2024-06-10T03:00:00Z"
    ]
  }
}

关键细节说明

  1. 用date -u获取UTC日期,避免GitLab流水线时区差异导致的日期错误
  2. jq的fromdateiso8601/todateiso8601负责ISO时间与时间戳的互转,确保时间计算准确
  3. 分割modelrun_updatetime_utc提取时间部分的逻辑,兼容所有标准ISO格式时间字符串
  4. 数组批量更新用map()实现,高效处理任意长度的时间数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:15:35