如何通过PowerShell将Azure EventHub的Avro文件转换为可用JSON
解决Azure Automation Runbook中解析EventHub捕获Avro文件Body的问题
核心问题分析
Read-Avro返回的PSCustomObject里,Body字段是字节数组格式,并非直接可用的JSON字符串,必须先完成字节到字符串的转换,再解析为JSON对象才能正常使用。
具体实现步骤
1. 导入AvroTools模块
确保Runbook开头导入模块(需先在Azure Automation账户中部署该模块):
Import-Module AvroTools
2. 读取Avro文件并转换Body内容
假设已将存储账户中的Avro文件下载到Runbook临时路径,执行以下代码:
# 读取Avro文件记录 $avroRecords = Read-Avro -Path "C:\Temp\eventhub-capture-file.avro" # 遍历每条记录提取并解析Body foreach ($record in $avroRecords) { # 将字节数组转为UTF-8字符串 $bodyString = [System.Text.Encoding]::UTF8.GetString($record.Body) # 解析为可直接操作的JSON对象 $bodyJson = $bodyString | ConvertFrom-Json # 示例:访问JSON属性 Write-Output "事件ID: $($bodyJson.EventId)" Write-Output "事件时间: $($bodyJson.Timestamp)" }
3. 处理编码兼容问题
若UTF-8转换后出现乱码,尝试切换编码方式:
# 改用Unicode编码转换 $bodyString = [System.Text.Encoding]::Unicode.GetString($record.Body)
验证示例
假设Body原始JSON格式为:
{"EventId": "EH-20240520-001", "Action": "DataSubmitted", "Timestamp": "2024-05-20T14:20:00Z"}
执行代码后,$bodyJson会成为可直接访问属性的PSCustomObject,你可根据业务需求提取字段或进行后续处理。
内容的提问来源于stack exchange,提问作者Xavier Rodriguez
相关产品推荐
相关产品推荐

