Skip to main content
 首页 » 编程设计

python之如何在python中将对象列表转换为json格式

2025年05月04日1052php

我在 python 中有一个类。我制作了一个包含此 class 实例的列表。我想将此列表转换为 json。这是我的类

class IpPort: 
    def __init__(self,ip,port,time,status): 
        self.ip=ip 
        self.port=port 
        self.time=time 
        self.status=status 

我有一个列表这个对象。我想将此 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 发送到一个套接字。之后我想在另一边获取 json。在另一边我想再次将它转换为列表。

请您参考如下方法:

你应该在你的对象中编写一个 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 创建自定义编码器来使其更加自动化,但这似乎有点过分了。

编辑:

要回答关于加载部分的评论,如果你只想要一个字典列表 json.loads 是要走的路。如果你想要一个 IpPort 的列表,你必须有办法做到这一点,你可以执行以下操作(考虑到你的 dumped dicts 是扁平的):

ip_ports = [IpPort(**attrs) for attrs in json.loads(dumped_ipports)] 

注意:** 运算符将字典转换为关键字参数。

如果您转储的字典不是扁平的(这是您的情况),您应该创建一个静态方法 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)]