POST请求触发JSONDecodeError:属性需用双引号包裹错误如何解决?
问题根因
你的错误完全来自plan1A1C函数最后两行的多余操作:
body本身就是合法的Python字典对象,你调用str(body)把字典转为字符串时,Python默认会用单引号包裹字典的键和字符串值,输出格式类似{'payload': 'xxx'},不符合JSON要求的双引号规范,因此json.loads解析时直接抛出你看到的双引号相关报错。- requests库
post方法的json参数原生支持直接传入Python字典,不需要你手动做任何JSON序列化/反序列化操作,json.loads(str(body))属于完全多余的错误操作。
修复方案
直接把plan1A1C函数末尾的两行:
s1 = json.loads(str(body)) return s1
替换为:
return body
即可解决当前报错。
额外优化建议
- 你导入的
from behave.formatter import null完全没必要,Python原生用None表示空值,requests在序列化字典时会自动把None转为JSON标准的null,可以把这行导入删掉,将body里所有的null替换为None,代码更符合Python规范。 - 你调用
requests.post时最后多了个多余的逗号:response = requests.post(url, json= plan1A1C(),),可以删掉末尾逗号避免语法警告。
内容的提问来源于stack exchange,提问作者Apratim Chaudhuri
相关产品推荐
相关产品推荐

