簡體   English   中英

如何在python中將對象列表轉換為json格式

[英]how to convert a list of object to json format in python

我在python中有一個class 和我做了包含此列表class實例。 我想將此列表轉換為json。 這是我的class

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

而且我有這個objectlist of 我想將此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創建自定義編碼器來使其更加自動化,但這在這里似乎有些過頭了。

編輯:

要回答有關load部分的評論,如果您只想要字典json.loads的列表, json.loads是一種方法。 如果需要IpPort列表, IpPort必須執行以下操作(執行以下操作)(考慮到轉儲的字典是平坦的):

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

注意: **運算符可將dict轉換為關鍵字參數。

如果轉儲的字典不平坦(您的情況),則應創建一個靜態方法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)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM