使用Python向Ubidots API发送JSON payload时提示无效文档的问题
问题排查与解决
核心问题分析
报错"The payload sent is not a valid json document"通常源于两个关键问题:
- POST请求未设置
Content-Type: application/json请求头,导致Ubidots无法识别发送的JSON字符串 - 原代码存在逻辑冗余,且忽略了传入的变量参数,同时请求发送环节可能缺少必要配置
具体修复步骤
修正请求头配置
确保你的post_request函数发送请求时,携带Content-Type: application/json头。如果使用requests库,示例如下:def post_request(payload): import requests url = "你的Ubidots设备API地址" headers = { "Content-Type": "application/json", "X-Auth-Token": "你的Ubidots令牌" } response = requests.post(url, data=payload, headers=headers) return response清理代码逻辑并修正参数使用
原代码中先根据传入变量构建payload,随后又硬编码键名完全忽略参数,属于逻辑错误。同时改用更高效的iterrows()遍历数据:import pandas as pd import json def build_payload(variable_1, variable_2, variable_3): # 读取目标文本文件(确认路径正确性) df = pd.read_csv('./2. gateway-lora/20230116.txt', sep='\t') # 遍历每一行数据 for _, row in df.iterrows(): f_cnt = int(row["f_cnt"]) rssi = int(row["rssi"]) snr = int(row["snr"]) # 使用传入的变量名作为键,匹配Ubidots设备变量 payload_dict = {variable_1: f_cnt, variable_2: rssi, variable_3: snr} # 序列化为标准JSON字符串 payload_json = json.dumps(payload_dict) print(payload_json) # 执行POST请求 post_request(payload_json) # 返回最后一条数据的JSON串(按需保留) return payload_json额外验证项
- 检查
post_request函数是否在传递payload时做了不必要的字符串转义 - 确认Ubidots设备的变量名与你传入的
variable_1/variable_2/variable_3完全一致(大小写敏感)
- 检查
内容的提问来源于stack exchange,提问作者Yasup
相关产品推荐
相关产品推荐

