向Notion API发送含反斜杠的JSON数据时POST请求报错
解决Notion API属性ID含反斜杠的POST请求验证错误
问题根源
你看到的属性ID "Z\\=g" 是JSON转义后的格式,真实属性ID其实是 Z\=g(JSON里的双反斜杠仅代表单个反斜杠)。之前的错误是因为手动处理JSON时,反斜杠被多次转义,导致API收到的ID变成了 Z\\\\=g,它把这个当成了不存在的属性名,因此抛出验证错误。
正确解决方案
1. 直接提取属性ID
从Notion API查询返回的结果中直接提取属性ID即可,无需手动修改转义符:
# 假设这是查询数据库得到的现有条目属性结构 existing_entry = { "properties": { "Worktype": { "id": "Z\\=g", "type": "select", "select": { "id": "_WG~", "name": "Firmware", "color": "orange" } } } } # 直接提取ID,Python会自动处理转义,得到真实的"Z\=g" worktype_prop_id = existing_entry["properties"]["Worktype"]["id"]
2. 用Python字典构造请求体,避免手动拼接JSON
永远不要手动编写JSON字符串,用Python字典定义请求参数,再通过json.dumps()自动处理转义逻辑:
import requests import json # 配置你的Notion信息 NOTION_TOKEN = "your_token_here" DB_ID = "your_database_id_here" headers = { "Authorization": f"Bearer {NOTION_TOKEN}", "Content-Type": "application/json", "Notion-Version": "2022-06-28" # 建议使用最新稳定版API } # 构造新页面的属性字典,用提取到的属性ID作为键 new_page_props = { worktype_prop_id: { "type": "select", "select": { "name": "Firmware" # 替换为你要设置的选项名称 } }, # 可添加其他属性,比如标题 "title": { "type": "title", "title": [{"text": {"content": "新固件任务"}}] } } # 构造完整请求体 payload = { "parent": {"database_id": DB_ID}, "properties": new_page_props } # 发送请求,用json.dumps自动处理转义 response = requests.post( "https://api.notion.com/v1/pages", headers=headers, data=json.dumps(payload) ) # 检查响应结果 if response.status_code == 200: print("条目添加成功") else: print(f"错误详情: {response.json()}")
关键注意事项
- 禁止手动拼接JSON:手动处理转义极易出错,
json.dumps()会自动处理所有特殊字符的转义,确保API收到正确格式的参数。 - 不要修改提取到的属性ID:从API返回的ID已经是正确转义后的字符串,直接使用即可,无需额外替换反斜杠。
- 确认API版本:使用Notion官方推荐的最新稳定版API,避免旧版本的兼容性问题。
内容的提问来源于stack exchange,提问作者Miguel Tavares
相关产品推荐
相关产品推荐

