91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內(nèi)不再提示

python之對象和json互相轉(zhuǎn)換

冬至配餃子 ? 來源:繆斯之子 ? 作者:肖新苗 ? 2022-08-23 10:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.轉(zhuǎn)換:對象與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.轉(zhuǎn)換:對象集合與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



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關注

    關注

    57

    文章

    4877

    瀏覽量

    90076
  • ASSERT
    +關注

    關注

    0

    文章

    17

    瀏覽量

    7662
  • JSON
    +關注

    關注

    0

    文章

    128

    瀏覽量

    7784
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    JSON:簡潔代碼高效搞定序列化與反序列化

    面對頻繁的數(shù)據(jù)交互需求,用最簡方式實現(xiàn)JSON序列化與反序列化已成為開發(fā)者必備技能,借助主流庫,輕松實現(xiàn)零負擔數(shù)據(jù)轉(zhuǎn)換JSON(JavaScriptObjectNotation)是一種輕量級
    的頭像 發(fā)表于 02-25 19:04 ?104次閱讀
    <b class='flag-5'>JSON</b>:簡潔代碼高效搞定序列化與反序列化

    極簡代碼,搞定JSON序列化與反序列化

    LuatOS開發(fā)中,使用以下兩個函數(shù)高效處理JSON數(shù)據(jù)。 1.1 ?兩個關鍵函數(shù) 1)json.encode(obj,t) 功能是將Lua對象序列化為
    的頭像 發(fā)表于 02-23 21:46 ?342次閱讀
    極簡代碼,搞定<b class='flag-5'>JSON</b>序列化與反序列化

    cJSON庫是什么?

    的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的數(shù)據(jù)交換語言。 cJSON
    發(fā)表于 01-29 07:13

    詳解DBC的Signal與JSON文本結(jié)合

    為了優(yōu)化CAN數(shù)據(jù)發(fā)送與接收的操作流程,更改以前手動輸入狀態(tài)對應數(shù)據(jù)的模式,采用下拉列表選擇內(nèi)容,但這需要用到超出DBC原有承載能力的信息。因此,將JSON與其結(jié)合,采用JSON格式文本寫入Signal的Comment屬性,將Comment屬性的字符串通過
    的頭像 發(fā)表于 01-06 10:57 ?305次閱讀
    詳解DBC的Signal與<b class='flag-5'>JSON</b>文本結(jié)合

    沒有專利的opencv-python 版本

    所有 官方發(fā)布的 opencv-python 核心版本(無 contrib 擴展)都無專利風險——專利問題僅存在于 opencv-contrib-python 擴展模塊中的少數(shù)算法(如早期 SIFT
    發(fā)表于 12-13 12:37

    解析淘寶拍立淘按圖搜索API接口與JSON數(shù)據(jù)示例參考

    應用。 獲取API權限和密鑰(App Key、App Secret)。 使用Python調(diào)用API的示例代碼。 3. JSON數(shù)據(jù)示例與解析 返回的JSON數(shù)據(jù)結(jié)構(gòu)解析。 如何提取關鍵信息(如商品ID、名稱、價格、圖片等)。 4
    的頭像 發(fā)表于 11-11 13:19 ?342次閱讀

    termux如何搭建python游戲

    termux如何搭建python游戲 Termux搭建Python游戲開發(fā)環(huán)境的完整指南 一、Termux基礎環(huán)境準備 Termux是一款無需root即可在安卓設備上運行的Linux終端
    發(fā)表于 08-29 07:06

    python app不能運行怎么解決?

    ;python_agent[1241]: xmlrpc request method supervisor.stopProcess failed;python_agent[1241]: xmlrpc request method supervisor.stopProces
    發(fā)表于 08-06 06:27

    迅為RK3568開發(fā)板基本工程目錄-app.json5

    AppScope>app.json5 是應用的全局的配置文件,用于存放應用公共的配置信息。app.json5文件內(nèi)容如下圖所示: 第 3 行代碼 bundleName 是包名 第 4
    發(fā)表于 07-14 10:56

    harmony-utilsJSONUtil,JSON工具類

    harmony-utilsJSONUtil,JSON工具類 harmony-utils 簡介與說明 harmony-utils 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實用工具類
    的頭像 發(fā)表于 07-03 18:21 ?471次閱讀

    harmony-utilsTempUtil,溫度轉(zhuǎn)換工具類

    harmony-utilsTempUtil,溫度轉(zhuǎn)換工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多
    的頭像 發(fā)表于 06-26 00:50 ?452次閱讀

    迅為RK3568開發(fā)板編寫bundle.json文件

    bundle.json 文件內(nèi)容如下所示: 下面是對各個字段的解釋: name: \"@ohos/demos\" - 這是組件或項目的名稱,這里表示它屬于 OHOS
    發(fā)表于 06-05 15:38

    從FA模型切換到Stage模型時:module的切換說明

    module的切換 從FA模型切換到Stage模型時,開發(fā)者需要將config.json文件module標簽下的配置遷移到module.json5配置文件module標簽下,具體差異
    發(fā)表于 06-05 08:16

    不用聯(lián)網(wǎng)不用編程,PLC通過智能網(wǎng)關快速實現(xiàn)HTTP協(xié)議JSON格式與MES等系統(tǒng)平臺雙向數(shù)據(jù)通訊

    智能網(wǎng)關IGT-DSER支持POST/GET/PUT等多種方法,可同時作為HTTP協(xié)議的客戶端和服務端。作為客戶端通訊時將JSON文件提交給HTTP的服務端, 如果服務端有返回的JSON,網(wǎng)關
    的頭像 發(fā)表于 05-13 14:40 ?1205次閱讀
    不用聯(lián)網(wǎng)不用編程,PLC通過智能網(wǎng)關快速實現(xiàn)HTTP協(xié)議<b class='flag-5'>JSON</b>格式與MES等系統(tǒng)平臺雙向數(shù)據(jù)通訊

    零基礎入門:如何在樹莓派上編寫和運行Python程序?

    在這篇文章中,我將為你簡要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運行一個簡單的Python程序。什么是Python程序?
    的頭像 發(fā)表于 03-25 09:27 ?2058次閱讀
    零基礎入門:如何在樹莓派上編寫和運行<b class='flag-5'>Python</b>程序?