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

Go语言:Shell输入JSON添加元数据(UUID/时间)输出异常问题

修正后的Shell脚本:将输入JSON转为标准Event结构

需求说明

通过Shell脚本接收JSON文件路径,输出包含specversion、UUID事件ID、RFC3339格式时间、source元数据的Event结构JSON,输入文件的JSON内容需完整填入data字段。

修正后的脚本代码

#!/bin/bash

# 检查参数数量
if [ $# -ne 1 ]; then
    echo "用法: $0 <输入JSON文件路径>"
    exit 1
fi

INPUT_FILE="$1"

# 验证文件有效性
if [ ! -f "$INPUT_FILE" ] || [ ! -r "$INPUT_FILE" ]; then
    echo "错误: 文件 $INPUT_FILE 不存在或不可读"
    exit 1
fi

# 生成元数据
EVENT_ID=$(uuidgen)
EVENT_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
SOURCE="your-app-source" # 可根据业务场景修改
SPEC_VERSION="1.0"

# 用jq组合最终Event结构
jq -n \
    --arg id "$EVENT_ID" \
    --arg time "$EVENT_TIME" \
    --arg source "$SOURCE" \
    --arg specver "$SPEC_VERSION" \
    --slurpfile data "$INPUT_FILE" \
    '{
        specversion: $specver,
        id: $id,
        time: $time,
        source: $source,
        data: $data[0]
    }'

关键修正点

  • 参数与文件校验:增加输入合法性检查,避免无参数或无效文件导致的运行错误
  • 元数据生成规范:
    • 用uuidgen生成标准UUID作为事件ID(系统无uuidgen时可替换为cat /proc/sys/kernel/random/uuid)
    • 生成UTC时区的RFC3339格式时间,符合Event规范要求
  • JSON内容正确注入:使用jq的--slurpfile参数读取输入文件,确保完整解析JSON结构并放入data字段(原代码可能因直接拼接文本导致JSON格式损坏)
  • 语法修正:修复jq语法错误,保证输出JSON结构合法

使用方法

  1. 保存脚本为json-to-event.sh,赋予执行权限:
chmod +x json-to-event.sh
  1. 传入目标JSON文件执行:
./json-to-event.sh input.json

预期输出示例

{
  "specversion": "1.0",
  "id": "a1b2c3d4-5678-90ef-ghij-klmnopqrstuv",
  "time": "2024-05-20T14:20:00Z",
  "source": "your-app-source",
  "data": {
    "user": "test",
    "action": "submit"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:01:07