在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python之對象和json互相轉換

冬至配餃子 ? 來源:繆斯之子 ? 作者:肖新苗 ? 2022-08-23 10:42 ? 次閱讀

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數據實現自動化(一)

    您可以使用 JSON 中的數據來復制最初作為模板創建的圖表,并為其提供新的數據表。您可以控制使用特定模板構建新演示文稿的順序。模板也可以多次使用。 PowerPoint 模板和 JSON 數據都可以
    的頭像 發表于 01-02 13:37 ?87次閱讀
    think-cell——使用<b class='flag-5'>JSON</b>數據實現自動化(一)

    實例篇 4G模組軟件json數據處理!

    今天我會把4G模組軟件的json數據處理整理成文,以低功耗模組Air780E為例,一一展示出來:
    的頭像 發表于 11-12 12:17 ?232次閱讀

    Python庫解析:通過庫實現代理請求與數據抓取

    Python中,有多個庫可以幫助你實現代理請求和數據抓取。這些庫提供了豐富的功能和靈活的API,使得你可以輕松地發送HTTP請求、處理響應、解析HTML/XML/JSON數據,以及進行復雜的網絡操作。
    的頭像 發表于 10-24 07:54 ?212次閱讀

    JSON協議是什么,物聯網中的RTU中如何使用JSON協議和服務器交互

    一 概述 1.1 什么是 JSON JSON是JavaScript Object Notation的簡稱,中文含義為“JavaScript 對象表示法”,它是一種數據交換的文本格式,而不是一種編程
    的頭像 發表于 09-25 16:14 ?961次閱讀
    <b class='flag-5'>JSON</b>協議是什么,物聯網中的RTU中如何使用<b class='flag-5'>JSON</b>協議和服務器交互

    如何利用python和API查詢IP地址?

    Python中,直接查詢IP地址的地理位置或詳細信息(如所屬國家、城市等)通常需要依賴外部API服務,因為Python標準庫本身不提供直接查詢IP地址地理位置的功能。以下是一個使用requests
    發表于 08-28 11:55

    pytorch和python的關系是什么

    在當今的人工智能領域,Python已經成為了最受歡迎的編程語言之一。Python的易學易用、豐富的庫和框架以及強大的社區支持,使其成為了數據科學、機器學習和深度學習等領域的首選語言。而在深度學習領域
    的頭像 發表于 08-01 15:27 ?2142次閱讀

    Python建模算法與應用

    Python作為一種功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔的語法、對動態輸入的支持以及解釋性語言的本質,使得Python在多個平臺
    的頭像 發表于 07-24 10:41 ?610次閱讀

    python訓練出的模型怎么調用

    使用pickle模塊 pickle 是Python的一個內置模塊,用于序列化和反序列化Python對象結構。使用 pickle 可以方便地保存和加載模型。 import pickle # 保存模型
    的頭像 發表于 07-11 10:15 ?2136次閱讀

    神經網絡的基本原理及Python編程實現

    神經網絡作為深度學習算法的基本構建模塊,模擬了人腦的行為,通過互相連接的節點(也稱為“神經元”)實現對輸入數據的處理、模式識別和結果預測等功能。本文將深入探討神經網絡的基本原理,并結合Python編程實現進行說明。
    的頭像 發表于 07-03 16:11 ?729次閱讀

    Labview與Halcon圖片Image互相轉換

    Labview 與Halcon 聯合開發 分享一下Labview 與Halcon Image格式相互轉換的程序, 整理了一個VI,LV_to _Halconxl.vi,可以直接調用,相互轉換兩種格式
    發表于 06-27 23:00

    微軟Windows 10/11系統新增PowerToys AI高級粘貼功能

    以C++到Python的轉化為例,只需輕松復制一段C++代碼,再按下特定快捷鍵即可完成自動化轉換。此外,微軟還在Build 2024開發者大會上展示了如何利用PowerToys將XML快速轉換
    的頭像 發表于 05-28 10:39 ?728次閱讀

    ?PLC設備通過智能網關采用HTTP協議JSON文件對接MES、ERP等系統平臺

    ,字符可自由修改,舉例只是為了描述各種JSON文件的結構實現。MQTT協議的發布/訂閱也是同樣的對應方式。具體如下: 多個Key:Value的同級組合: 包含子對象: 增加時間戳,多種格式可以
    發表于 05-13 12:04

    python解析netflow數據到csv的流程詳解

    本文主要講解了linux下通過tcpdump抓取netflow數據包,并將其導入到wireshark進行解析,然后通過wireshark導出數據為json文件,再通過python腳本將其解析為csv文件以便做數據分析。
    的頭像 發表于 05-01 11:18 ?700次閱讀
    <b class='flag-5'>python</b>解析netflow數據到csv的流程詳解

    python中open函數的用法詳解

    python中open函數的用法詳解 Python中的open()函數用于打開文件。它接受文件名和模式作為參數,并返回一個文件對象。文件對象可用于讀取、寫入和管理文件。 open()函
    的頭像 發表于 01-30 15:31 ?2198次閱讀

    ?PLC從HTTP服務端獲取JSON文件,解析數據到寄存器

    智能網關IGT-DSER集成了多種PLC協議,方便實現各種PLC與HTTP服務端之間通訊。通過網關的參數配置軟件綁定JSON文件的字段與PLC寄存器地址,配置URL,即可采用POST命令,將JSON
    發表于 01-24 09:47
    主站蜘蛛池模板: 欧美在线一级视频| 日本大黄在线观看| 女同性大尺度床戏视频| 亚洲欧洲一区二区三区在线 | 韩国理论片2023现在观看| 黄网在线观看| 精品欧美| 禁漫画羞羞动漫入口| 亚洲黄色影片| 色噜噜狠狠狠狠色综合久一| 欧美色欧美亚洲高清在线视频| 久久免费精品国产72精品剧情| 成人欧美精品大91在线| 亚洲午夜在线观看| 久久久久久天天夜夜天天| 欧美zo| 黄 色 成 年人网站| 国产精品美女久久久久网站| 69xxxx日本| 一级做a爰片久久毛片免费看| 四虎影视在线观看| 亚洲综合色婷婷| 色香淫欲| 激情五月婷婷综合| 夜夜cao| 国产午夜免费一区二区三区| 激情综合激情| 中文字幕精品一区二区2021年 | 免费视频在线看| 99久久国产综合精品国| 日本特黄特色| 国产精品www视频免费看| 国产成人精品日本亚洲专| 天天天做天天天天爱天天想| 99久久免费午夜国产精品| 男女性接交无遮挡免费看视频| 天堂bt资源在线官网| 国模龙园园私拍337p| 高清激情小视频在线观看| 天天操夜夜摸| 久久天天|