经json.dumps与json.loads处理的内容无法被JSON查看器识别问题
问题根因
你复制到JSON查看器的内容根本不是合法JSON,而是Python字典对象的控制台打印输出,和你生成的JSON字符串完全是两个东西:
- 执行
a = json.dumps(dicter)时,变量a里存储的确实是符合标准规范的JSON字符串:字符串和键名用双引号包裹、布尔值为小写true/false,本身没有任何格式问题。 - 你后续执行
print(json.loads(a))时,json.loads(a)会把JSON字符串反序列化为Python原生字典对象,print输出的是这个Python字典的字符串表示,不是存在a里的合法JSON串。
你贴出的内容有两处明确违反JSON语法规范,这就是查看器报错的直接原因:
- 所有键名、字符串值都使用单引号
'包裹,JSON标准仅允许使用双引号"包裹字符串类型内容 - 布尔值为Python语法的大写开头
False,JSON标准要求布尔值必须为全小写的false
至于你本地dumps和loads流程没有报错,是因为这两个函数本身的作用就是完成「Python对象」和「合法JSON字符串」的双向转换,整个流程里你从来没有把打印出来的字典字符串丢给JSON解析器处理,自然不会抛出错误。如果把你贴出来的那段控制台输出存为字符串再调用json.loads(),会直接触发JSON解析异常。
正确获取合法JSON的方式
如果需要导出能被任意JSON查看器正常识别的内容,直接打印存储JSON字符串的变量a即可,执行print(a)输出的内容就是完全符合标准的JSON格式,复制到查看器不会再报格式错误。
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

