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

如何编写Bash骨架脚本:处理JSON设备文件生成合规Kafka事件

编写Bash骨架脚本实现DEVICE_PROVISION_EVENT生成

依赖工具

确保系统已安装以下工具:

  • jq:用于JSON解析与构建,保证JSON格式合规
  • uuidgen:生成符合要求的UUID事件ID
  • date(coreutils包):生成标准格式的本地时间戳

完整骨架脚本

#!/bin/bash

# 配置参数:指定设备JSON文件所在文件夹
INPUT_DIR="/path/to/your/device/json/folder"

# 检查输入文件夹是否存在
if [ ! -d "$INPUT_DIR" ]; then
    echo "错误:输入文件夹 $INPUT_DIR 不存在"
    exit 1
fi

# 遍历文件夹内所有JSON文件
for json_file in "$INPUT_DIR"/*.json; do
    # 跳过非文件(比如匹配不到文件时的通配符本身)
    [ -f "$json_file" ] || continue

    echo "正在处理文件:$json_file"

    # 1. 读取并转义设备JSON内容,确保可嵌入Kafka事件的data字段
    # 使用jq的@json过滤器完成标准JSON转义,避免手动转义出错
    escaped_device_data=$(jq -c . "$json_file" | jq -R @json)

    # 2. 生成事件ID(UUID)
    event_id=$(uuidgen)

    # 3. 生成符合RFC3339标准的本地时间戳
    event_time=$(date --iso-8601=seconds)

    # 4. 构建合规的DEVICE_PROVISION_EVENT事件
    kafka_event=$(jq -n \
        --arg specversion "4.0" \
        --arg id "$event_id" \
        --arg source "CCS" \
        --arg type "DEVICE_PROVISION_EVENT" \
        --arg time "$event_time" \
        --arg data "$escaped_device_data" \
        '{
            specversion: $specversion,
            id: $id,
            source: $source,
            type: $type,
            time: $time,
            data: $data
        }')

    # 输出事件(可替换为发送到Kafka的命令,比如kafka-console-producer.sh)
    echo "生成的Kafka事件:"
    echo "$kafka_event"
    echo "----------------------------------------"

    # 可选:发送到Kafka示例(需配置Kafka地址与主题)
    # echo "$kafka_event" | kafka-console-producer.sh --broker-list localhost:9092 --topic your_topic_name
done

exit 0

关键部分说明

  • JSON转义:使用jq -c .将设备JSON压缩为单行,再通过jq -R @json完成标准转义,确保双引号、换行符等特殊字符被正确处理,避免破坏外层Kafka事件的JSON结构。
  • 事件ID生成:uuidgen默认生成UUIDv4格式字符串,符合事件ID唯一性要求。
  • 时间戳:date --iso-8601=seconds生成YYYY-MM-DDTHH:MM:SS+HH:MM格式的本地时间戳,符合CloudEvents规范的时间格式要求。
  • 事件构建:通过jq的变量替换功能构建事件,避免手动拼接JSON时出现语法错误,保证输出的JSON完全合规。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:27:37