JSONEncoder子类返回实际的JSON表示,而不是可序列化的对象

时间:2012-08-27 17:26:35

标签: python json

我正在尝试使用python 2.7的内置ISOWeek模块对自定义python类json的实例进行编码。我希望它不是编码到JS字符串(例如"2012-08"),而是编码构造函数:new ISOWeek({year: 2012, kw: 8})。 Python的json文档说我应该子类JSONEncoder并覆盖default方法,但是我只能从它返回另一个JSON可序列化对象,而不是实际的序列化。查看json.py源代码,我没有看到明显的方法来破解模块。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我建议不要将构造函数调用直接放入JSON(使其成为无效的JSON),而是建议您格式化数据,以便了解正在发生的事情,并且只需修改JS即可进行正确的转换,例如以下内容:

{"date": new ISOWeek({year: 2012, kw: 8})}

我会建议这样的事情:

{"date": ["ISOWeek", {"year": 2012, "kw": 8}]}

答案 1 :(得分:1)

我不认为这是有效的JSON。见http://www.json.org/。您可以在JavaScript中执行此操作,但在JSON中,您只能使用基本类型(字符串,数字,布尔值,null和这些类型的列表/词组)。

您可以将其序列化为构造函数的字符串版本,或包含相关信息的其他对象。但是,无论如何,您都需要在接收端进行处理,以将其解码为ISOWeek对象。