1.轉換:對象與json
import json
from typing import Dict
class Person:
def __init__(self, name: str = 'xiaomiao'):
self.name = name
@staticmethod
def to_dict(obj: 'Person'):
return obj.__dict__
@classmethod
def from_dict(cls, dict: Dict)->'Person':
p = cls()
p.__dict__ = dict
return p
class Female(Person):
def __init__(self, name: str = 'xiao', sex: int = 1):
self.name = name
self.sex = sex
def test_1():
p = Person('xiao')
json1 = json.dumps(p, default=Person.to_dict)
assert '{"name": "xiao"}' == json1, 'json dump error'
p2 = json.loads(json1, object_hook=Person.from_dict)
assert p.__dict__ == p2.__dict__, 'json loads error'
def test_2():
p_list = [Person('xiao1'), Person('xiao2')]
json1 = json.dumps(p_list, default=Person.to_dict)
assert '[{"name": "xiao1"}, {"name": "xiao2"}]' == json1, 'json dump 2 error'
p2_list = json.loads(json1, object_hook=Person.from_dict)
assert p_list[0].__dict__ == p2_list[0].__dict__ and p_list[1].__dict__ == p2_list[1].__dict__, 'json loads 2 error'
def test_3():
p = Female(name='xiao1', sex=1)
json1 = json.dumps(p, default=Female.to_dict)
assert '{"name": "xiao1", "sex": 1}' == json1, 'json dump error'
p2 = json.loads(json1, object_hook=Female.from_dict)
assert p.__dict__ == p2.__dict__, 'json loads error'
2.轉換:對象集合與json列表
import importlib
import json
from typing import Dict
class Person1:
def __init__(self, name: str = 'xiao'):
self.name = name
class Person:
def __init__(self, name: str = 'good'):
self.name = name
self.p1:Person1 = None
@staticmethod
def to_dict_pure(obj: 'Person'):
return obj.__dict__
@staticmethod
def to_dict(obj: 'Person'):
obj.__dict__.update(
{'fullname': f'{obj.__module__}.{obj.__class__.__name__}'})
return obj.__dict__
@staticmethod
def from_dict(dict: Dict)->'Person':
module, classname = dict['fullname'].rsplit('.', 1)
p = getattr(importlib.import_module(module), classname)()
p.__dict__ = dict
return p
def test_1():
p = Person('xiao')
p.p1 = Person1('xinmiao')
json1 = json.dumps(p, default=Person.to_dict)
assert '{"name": "xiao", "p1": {"name": "xinmiao", "fullname": "test_obj_conv_2.Person1"}, ' +\
'"fullname": "test_obj_conv_2.Person"}' == json1, 'json dumps error'
p2 = json.loads(json1, object_hook=Person.from_dict)
assert p.__dict__['name'] == p2.__dict__['name'] \
and p.__dict__['p1'].__dict__ == p2.__dict__['p1'].__dict__, 'json loads error'
def test_2():
p1 = Person('xiao1')
p1.p1 = Person1('xin1')
p2 = Person('xiao2')
p2.p1 = Person1('xin2')
p_list = [p1, p2]
json1 = json.dumps(p_list, default=Person.to_dict)
assert '[{"name": "xiao1", "p1": {"name": "xin1", "fullname": "test_obj_conv_2.Person1"},' +\
' "fullname": "test_obj_conv_2.Person"}, {"name": "xiao2", "p1": {"name": "xin2", ' +\
'"fullname": "test_obj_conv_2.Person1"}, "fullname": "test_obj_conv_2.Person"}]', 'json dumps 2 error'
p2_list = json.loads(json1, object_hook=Person.from_dict)
assert p_list[0].__dict__['name'] == p2_list[0].__dict__['name'] \
and p_list[0].__dict__['p1'].__dict__ == p2_list[0].__dict__['p1'].__dict__ \
and p_list[1].__dict__['name'] == p2_list[1].__dict__['name'] \
and p_list[1].__dict__['p1'].__dict__ == p2_list[1].__dict__['p1'].__dict
審核編輯:劉清
-
python
+關注
關注
56文章
4802瀏覽量
84890 -
ASSERT
+關注
關注
0文章
17瀏覽量
7260 -
JSON
+關注
關注
0文章
119瀏覽量
6987
發布評論請先 登錄
相關推薦
think-cell——使用JSON數據實現自動化(一)
![think-cell——使用<b class='flag-5'>JSON</b>數據實現自動化(一)](https://file1.elecfans.com/web3/M00/04/8A/wKgZPGd2JyaAF1LTAAAwCZsElnc512.png)
Python庫解析:通過庫實現代理請求與數據抓取
JSON協議是什么,物聯網中的RTU中如何使用JSON協議和服務器交互
![<b class='flag-5'>JSON</b>協議是什么,物聯網中的RTU中如何使用<b class='flag-5'>JSON</b>協議和服務器交互](https://file1.elecfans.com//web2/M00/07/F1/wKgZombzxmuAEibqAAAaD3qYSfA535.jpg)
如何利用python和API查詢IP地址?
pytorch和python的關系是什么
Python建模算法與應用
python訓練出的模型怎么調用
神經網絡的基本原理及Python編程實現
Labview與Halcon圖片Image互相轉換
微軟Windows 10/11系統新增PowerToys AI高級粘貼功能
?PLC設備通過智能網關采用HTTP協議JSON文件對接MES、ERP等系統平臺
python解析netflow數據到csv的流程詳解
![<b class='flag-5'>python</b>解析netflow數據到csv的流程詳解](https://file1.elecfans.com/web2/M00/D9/FE/wKgaomYpzAiAPrQGAABVCN7G14M811.png)
評論