Python将含字典的列表生成JSON时出现true未定义报错如何解决
问题原因
- Python语法不识别JSON风格的布尔值与空值。JSON中表示真、假、空的关键字是
true/false/null,但Python对应的关键字是首字母大写的True/False/None,你直接在Python代码的字典里写true会被解释器当作未定义的变量,因此触发NameError。 - 代码逻辑不符合导出JSON的需求。你的
data本身已经是合法的Python列表嵌套字典结构,不需要调用strip()(列表本身没有strip方法,修正第一个错误后会立刻触发第二个报错),json.loads()是用来将JSON格式的字符串转换为Python对象的,把Python对象导出为JSON文件应该用json.dump()方法。
解决代码
如果data是你直接在Python代码中定义的结构,修正关键字写法后直接导出即可:
import json # 修正Python语法的关键字写法 data = [ {"ModelCode":"VH017","MakeCode":"VM020","VehicleTypeCode":"VC00000052","Year":2017,"IsActive":True,"RegistrationNumber":"KCC 254 ZY","IsApproved":True,"ApprovedBy":None,"Color":"BLUE","Id":"8c5062da-727b-40d5-b763-408cafdc53d8","_id":"3ce92939-4df7-4b9e-af48-647e218736da"}, {"ModelCode":"VH024","MakeCode":"VM026","VehicleTypeCode":"VC00000053","Year":2008,"IsActive":False,"RegistrationNumber":"kkk 333k","IsApproved":False,"ApprovedBy":None,"Color":"blue","Id":"8c5062da-727b-40d5-b763-408cafdc53d8"} ] # 导出为JSON文件,ensure_ascii=False保证非ASCII字符正常显示,indent=4格式化输出更易读 with open("output.json", "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=4)
如果你的data实际是从API接口拿到的原始JSON字符串,不是自己写的Python对象,直接把完整字符串传给json.loads()即可,不需要做strip、split操作:
import json # 假设这是从API拿到的原始JSON字符串 data_str = '[{"ModelCode":"VH017","MakeCode":"VM020","VehicleTypeCode":"VC00000052","Year":2017,"IsActive":true,"RegistrationNumber":"KCC 254 ZY","IsApproved":true,"ApprovedBy":null,"Color":"BLUE","Id":"8c5062da-727b-40d5-b763-408cafdc53d8","_id":"3ce92939-4df7-4b9e-af48-647e218736da"},{"ModelCode":"VH024","MakeCode":"VM026","VehicleTypeCode":"VC00000053","Year":2008,"IsActive":false,"RegistrationNumber":"kkk 333k","IsApproved":false,"ApprovedBy":null,"Color":"blue","Id":"8c5062da-727b-40d5-b763-408cafdc53d8"}]' # 转换为Python对象 data = json.loads(data_str) # 导出为文件 with open("output.json", "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=4)
内容的提问来源于stack exchange,提问作者kelvin
相关产品推荐
相关产品推荐

