[英]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
而且我有這個object
的list 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.