<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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
    +關注

    關注

    52

    文章

    4698

    瀏覽量

    83610
  • ASSERT
    +關注

    關注

    0

    文章

    17

    瀏覽量

    7155
  • JSON
    +關注

    關注

    0

    文章

    112

    瀏覽量

    6843
收藏 人收藏

    評論

    相關推薦

    關于JSON數據庫

    如何理解JSON數據庫?作為NoSQL數據庫的一種類型,JSON數據庫有哪些優勢呢?JSON數據庫如何運作,它為應用程序開發者帶來了哪些價值呢?
    的頭像 發表于 12-06 13:46 ?545次閱讀
    關于<b class='flag-5'>JSON</b>數據庫

    什么是JSON數據庫

    如何理解JSON數據庫?作為NoSQL數據庫的一種類型,JSON數據庫有哪些優勢呢?JSON數據庫如何運作,它為應用程序開發者帶來了哪些價值呢?文章速覽:什么是JSON什么是
    的頭像 發表于 12-02 08:04 ?472次閱讀
    什么是<b class='flag-5'>JSON</b>數據庫

    Python 不可變對象真的不可變嗎

    在日常的學習和工作中,經常會遇到"不可變對象"的問題,但是隨著接觸Python這門語言的時間越來越多,遇到的坑越來越奇怪。我不禁產生了一個疑問:不可變對象真的不可變嗎? 我們知道元組就是"不可變
    的頭像 發表于 11-03 11:48 ?349次閱讀
    <b class='flag-5'>Python</b> 不可變<b class='flag-5'>對象</b>真的不可變嗎

    如何讓Python和Go互相調度

    我們曾經研究過如何讓Python和Go互相調度,當時發現,將Go語言寫的模塊打包成動態鏈接庫,就能在Python中進行調度: 優劣互補! Python+Go結合開發的探討 Go的優勢很
    的頭像 發表于 11-02 11:24 ?296次閱讀
    如何讓<b class='flag-5'>Python</b>和Go<b class='flag-5'>互相</b>調度

    Python中元類的作用

    1.什么是類 在理解元類之前,我們必須先掌握Python中的類(class)。 和大多數語言一樣,Python中的類知識用來描述如何“生成一個對象”: 但是,在Python中,類不僅能
    的頭像 發表于 11-02 11:18 ?269次閱讀
    <b class='flag-5'>Python</b>中元類的作用

    如何利用Python和pandas來處理json數據

    在實際工作中,尤其是web數據的傳輸,我們經常會遇到json數據。它不像常見的文本數據、數值數據那樣友好,而且它和Python中的字典類型數據又很相像,給很多人造成了困擾。 本文結合具體案例詳細介紹
    的頭像 發表于 11-01 10:59 ?862次閱讀
    如何利用<b class='flag-5'>Python</b>和pandas來處理<b class='flag-5'>json</b>數據

    JSON的使用方法

    JSON值可以是對象、數組、數字、字符串或者三個字面值(false、true、null),并且字面值必須是小寫英文字母。 對象 對象是由花括號括起來,逗號分割的成員構成,成員是字符
    的頭像 發表于 10-31 16:42 ?528次閱讀
    <b class='flag-5'>JSON</b>的使用方法

    Delorean:優秀的Python時間格式轉換工具

    DeLorean是一個Python的第三方模塊,基于 pytz 和 dateutil 開發的,用于處理Python中日期時間的格式轉換。 由于時間轉換是一個足夠微妙的問題,DeLore
    的頭像 發表于 10-31 10:51 ?284次閱讀

    如何用Python轉移文件至云對象存儲

    對象存儲(Cloud Object Storage,COS)是一種存儲海量文件的分布式存儲服務,具有高擴展性、低成本、可靠安全等優點。 對象存儲有什么用呢?對于站長而言,比如Python實用寶典網站
    的頭像 發表于 10-31 10:22 ?320次閱讀
    如何用<b class='flag-5'>Python</b>轉移文件至云<b class='flag-5'>對象</b>存儲

    Ruby 與 Python之間的差異

    Ruby 與 Python 之間的差異在很大程度上可通過 for 循環看出本質。 Python 擁有 for 語句。對象告訴 for 如何進行協作,而 for 的循環體會處理對象返回的
    的頭像 發表于 10-30 11:50 ?403次閱讀

    對象轉換工具:MapStruct 庫

    在我們日常開發的程序中,為了各層之間解耦,一般會定義不同的對象用來在不同層之間傳遞數據,比如xxxDTO、xxxVO、xxxQO,當在不同層之間傳輸數據時,不可避免地經常需要將這些對象進行相互轉換
    的頭像 發表于 10-08 14:39 ?706次閱讀

    QT原生的QJson是否有更優雅的方法來封裝一些Json對象

    之前一直用的是cJSON庫來封裝和解析,寫久了感覺實在太丑,又難維護,于是還是研究下QT原生的QJson是否有更優雅的方法來封裝一些Json對象
    的頭像 發表于 10-08 09:26 ?597次閱讀
    QT原生的QJson是否有更優雅的方法來封裝一些<b class='flag-5'>Json</b><b class='flag-5'>對象</b>

    CAN接口與485接口如何實現互相轉換?

    CAN接口與485接口如何實現互相轉換? CAN總線和RS-485總線都是工業級數據傳輸總線,它們在不同的工業自動化控制應用中被廣泛應用。但是在一些特定的應用場景下,需要將CAN接口與RS-485
    的頭像 發表于 09-14 17:52 ?4165次閱讀

    Python的面向對象編程詳解

    一般編程可分為面向過程編程,和面向對象編程。Python的面向對象編程,與Java的面向對象很像。之所以需要面向對象編程,是為了更好地實現封
    發表于 09-04 16:35 ?320次閱讀
    <b class='flag-5'>Python</b>的面向<b class='flag-5'>對象</b>編程詳解

    使用Teachable Machine和Python輕松進行對象檢測

    電子發燒友網站提供《使用Teachable Machine和Python輕松進行對象檢測.zip》資料免費下載
    發表于 06-27 09:26 ?0次下載
    使用Teachable Machine和<b class='flag-5'>Python</b>輕松進行<b class='flag-5'>對象</b>檢測
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>