解决 TypeError: Object of type X is not JSON serializable:5 种修法与一个快速定位技巧
TL;DR:你调json.dumps()把一份数据转成 JSON,结果抛TypeError: Object of type Foo is not JSON serializable。原因是 json 编码器只认 6 种原生类型(dict、list、str、int、float、bool、None),任何别的 Python 对象都得先转成这几种,没转就报这个错。下面给 5 种修法、一个能立刻定位到"是哪个字段出问题"的技巧,以及"我加了default=为什么还是不生效"的那个坑。
你会看到什么,以及一句话原因
最典型的场景是这个:你从数据库或接口拿到一份数据,上面挂着datetime或一个 ORM 对象,然后json.dumps(data),直接抛:
TypeError: Object of type datetime is not JSON serializable一句话原因:JSON 标准只有 6 种数据类型(对象、数组、字符串、数字、true/false、null),对应到 Python 就是 dict、list、str、int/float、bool、None。datetime、set、bytes、Dec