如何使JSON类可序列化

如何使JSON类可序列化

如何使Python类可序列化?

一个简单的类:

class FileItem:
    def __init__(self, fname):
        self.fname = fname

我应该怎么做才能得到以下的输出:

json.dumps()

没有错误(FileItem instance at ... is not JSON serializable)


冉冉说
浏览 690回答 3
3回答

慕无忌1623718

你对预期的产出有什么想法吗?这就行了吗?>>>&nbsp;f&nbsp;&nbsp;=&nbsp;FileItem("/foo/bar")>>>&nbsp;magic(f)'{"fname":&nbsp;"/foo/bar"}'在这种情况下,您只需调用json.dumps(f.__dict__).如果您想要更多的自定义输出,则必须将JSONEncoder并实现您自己的自定义序列化。关于一个简单的例子,请参阅下面。>>>&nbsp;from&nbsp;json&nbsp;import&nbsp;JSONEncoder>>>&nbsp;class&nbsp;MyEncoder(JSONEncoder): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;default(self,&nbsp;o): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;o.__dict__&nbsp;&nbsp;&nbsp;&nbsp; >>>&nbsp;MyEncoder().encode(f)'{"fname":&nbsp;"/foo/bar"}'然后将这个类传递给json.dumps()方法AScls夸格:json.dumps(cls=MyEncoder)如果您还想解码,则必须提供一个自定义object_hook到JSONDecoder班级,等级。例如:>>>&nbsp;def&nbsp;from_json(json_object): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;'fname'&nbsp;in&nbsp;json_object: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;FileItem(json_object['fname'])>>>&nbsp;f&nbsp;=&nbsp;JSONDecoder(object_hook&nbsp;=&nbsp;from_json).decode('{"fname":&nbsp;"/foo/bar"}') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;>>>&nbsp;f<__main__.FileItem&nbsp;object&nbsp;at&nbsp;0x9337fac>>>>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python