Akn*_*glu 1 python sockets json list python-3.x
我有一个classpython.我制作了一个包含这个class实例的列表.我想将此列表转换为json.这是我的class  
class IpPort:
    def __init__(self,ip,port,time,status):
        self.ip=ip
        self.port=port
        self.time=time
        self.status=status
我有list of这个object.我想将其转换list为json格式发送socket.但我不能.我怎样才能做到这一点?我希望它像:
{"IpPortList":{[]}}
编辑 这是我的代码.但它不起作用:
li=list()
i1=IpPort("kk",12,None,"w")
i2=IpPort("kk",15,None,"s")
li.append(i1)
li.append(i2)
jsons= json.dumps(li)
s.send(jsons)
我想这个JSON发送到我要带另一side.In对方再次,我想将它转化成列出JSON一个socket.After.
您应该dump在对象中编写一个方法,并在将内容发送到json模块时使用它:
class IpPort:
    def __init__(self, ip, port, time, status):
        self.ip = ip
        self.port = port
        self.time = time
        self.status = status
    def dump(self):
        return {"IpPortList": {'ip': self.ip,
                               'port': self.port,
                               'time': self.time,
                               'status': self.status}}
将数据转换为json时:
json.dumps([o.dump() for o in my_list_of_ipport])
您甚至可以通过为JSON创建自定义编码器来使其更加自动化,但这似乎有些过分.
编辑:
要回答有关加载部分的注释,如果您只是想要一个dict列表json.loads是要走的路.如果你想要一个列表,IpPort你必须要做的方法,你要么做到以下(考虑到你的倾销dicts是平的):
ip_ports = [IpPort(**attrs) for attrs in json.loads(dumped_ipports)]
注意:**运算符将dict转换为关键字参数.
如果转储的dicts不是平的(这是你的情况),你应该创建一个静态方法load,它返回从转储创建的对象的实例:
class IpPort:
    ... blablabla ...
    @staticmethod
    def load(dumped_obj):
        return IpPort(dumped_obj['IpPortList']['ip'],
                      dumped_obj['IpPortList']['port'],
                      dumped_obj['IpPortList']['time'],
                      dumped_obj['IpPortList']['status'])
以及使其成为列表的方式:
my_ip_ports = [IpPort.load(dumped_ipport)
               for dumped_ipport in json.loads(dumped_stuff)]