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结构合法
使用方法
- 保存脚本为
json-to-event.sh,赋予执行权限:
chmod +x json-to-event.sh
- 传入目标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
相关产品推荐
相关产品推荐

