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

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

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

我认为这是不对的。看见您可以在JavaScript中这样做,但在JSON中,您仅限于基本类型(字符串、数字、布尔值、null以及这些类型的列表/目录)


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

我认为这不是有效的JSON。看见您可以在JavaScript中这样做,但在JSON中,您仅限于基本类型(字符串、数字、布尔值、null以及这些类型的列表/目录)


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

我建议您格式化数据,以便了解发生了什么,并修改JS以进行正确的转换,而不是将构造函数调用直接放入JSON(这会使JSON无效),例如,而不是以下内容:

{"date": new ISOWeek({year: 2012, kw: 8})}
我建议这样做:

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

与直接将构造函数调用放入JSON(这会使JSON无效)不同,我建议格式化您的数据,以便您知道发生了什么,只需修改JS以进行正确的转换,例如,而不是执行以下操作:

{"date": new ISOWeek({year: 2012, kw: 8})}
我建议这样做:

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

你的原始输入看起来像什么?你的原始输入看起来像什么?是的,这就是答案。Python的JSON编码器用于生成JSON。是的,这就是答案。Python的JSON编码器是用来生成JSON的。对,我没有意识到我违反了JSON规范。我发现pypi中的
demjson
包有一个编码器类,可以生成我想要的东西,但是正确地解决这个问题可能更好。谢谢大家!!对,我没有意识到我违反了JSON规范。我发现pypi中的
demjson
包有一个编码器类,可以生成我想要的东西,但是正确地解决这个问题可能更好。谢谢大家!!