我是python的新手(我使用python 3),并且我尝试使用JSon中的一个字符串和两个列表作为成员序列化一个类。我发现python标准中有一个json库,但似乎我需要手动实现序列化方法。是否有一个JSon编码器,我可以在其中简单地传递一个对象,并以字符串形式接收序列化的对象,而无需实现序列化方法。例:
class MyClass: pass if __name__ == '__main__': my_name = "me" my_list = {"one","two"} my_obj = MyClass() my_obj.name = my_name; my_obj.my_list = my_list serialized_object = JSONserializer.serialize(my_obj).
谢谢。
不了解任何预构建的内容,但是如果您的对象足够简单,则可以编写一个。覆盖JSONEncoder中的默认方法以查看inspect.getmembers(obj)(inspect是获取中的属性集的更易读的方法__dict__)。
__dict__
#!/usr/bin/env python3 import inspect from json import JSONEncoder class TreeNode: def __init__(self, value, left=None, right=None): self.value = value self.left = left self.right = right class ObjectJSONEncoder(JSONEncoder): def default(self, reject): is_not_method = lambda o: not inspect.isroutine(o) non_methods = inspect.getmembers(reject, is_not_method) return {attr: value for attr, value in non_methods if not attr.startswith('__')} if __name__ == '__main__': tree = TreeNode(42, TreeNode(24), TreeNode(242), ) print(ObjectJSONEncoder().encode(tree))
更新: @Alexandre Deschamps说,对于某些输入而言,isroutine比方法更有效。