添加时间字段后Python JSON格式无效,无法同步至Azure IoT Hub及DX
解决Azure IoT Hub传输日期时间字段的JSON格式问题
问题根源
你生成的无效JSON里,timesent字段的值既没有用双引号包裹(不符合JSON字符串格式要求),也不是Azure DX兼容的标准日期时间格式,导致解析失败。
可行解决方案
1. 生成标准格式的时间字符串
Azure DX对时序数据的日期时间字段,推荐使用ISO 8601格式(带UTC时区标识优先),比如2022-11-08T14:21:04.021812Z,同时必须确保这个值是JSON字符串类型(用双引号包裹)。
2. 修改Python代码实现
基于你使用的微软模拟设备示例代码,做以下修改:
- 先导入
datetime模块 - 在生成温湿度数据的代码块中,添加生成ISO格式时间的逻辑
- 将时间字符串加入待发送的JSON字典
示例代码片段:
import datetime # ... 原代码其他部分 ... while True: temperature = random.randint(0, 100) humidity = random.randint(0, 100) + random.random() # 生成UTC时间的ISO 8601格式字符串 timesent = datetime.datetime.utcnow().isoformat() + 'Z' # 构造符合要求的JSON数据 msg_formatted = { "temperature": temperature, "humidity": humidity, "timesent": timesent } # 转换为JSON字符串发送 message = Message(json.dumps(msg_formatted)) # ... 原代码发送逻辑 ...
3. 验证正确的JSON格式
修改后生成的有效JSON示例:
{"temperature": 7,"humidity": 72.88, "timesent": "2022-11-08T14:21:04.021812Z"}
额外提示
- 若需使用本地时间,可替换为
datetime.datetime.now().isoformat(),但建议优先用UTC时间避免时区混乱 - 在Azure DX的映射配置中,需将
timesent字段的类型设置为DateTime,确保能正确识别并用于时序分析
内容的提问来源于stack exchange,提问作者JoeHo
相关产品推荐
相关产品推荐

