python使用动态属性访问JSON类数据,Get it!

目录

1、基础访问:内置json模块 📦

1.1 json.loads转换字符串

1.2 动态属性访问技巧

2、面向对象方式处理JSON 🛰️

2.1 创建JSON数据模型类

2.2 动态属性与方法绑定

3、类型安全: 数据类(dataclasses)应用 🔒

3.1 数据类基础

3.2 自动从JSON解构数据

3.3 动态属性与类型检查

4、数据模型封装:pydantic 🛠

4.1 pydantic模型定义

4.2 JSON解析与属性动态绑定

5、总结 🚀



1、基础访问:内置json模块 📦

1.1 json.loads转换字符串

在Python中,json模块是处理JSON数据的内置工具箱。当从网络或文件中读取JSON格式的数据时,首先需要将这些数据转换为Python可以理解的对象,如字典或列表。json.loads()函数正是为此设计的,它能够将一个JSON格式的字符串转换成Python数据类型。

代码示例:

import json

json_string = '{"name": "张三", "age": 30, "city": "北京"}'
data = json.loads(json_string)
print(data)

输出结果:

{'name': '张三', 'age': 30, 'city': '北京'}

通过json.loads(), 我们可以轻松地将JSON字符串转换为Python字典,从而方便后续操作。

1.2 动态属性访问技巧

虽然直接使用字典访问方式(例如 data['name'])来获取JSON数据中的值是常见的做法 ,但在某些场景下 ,我们可能希望以更直观的方式,即像访问类的属性那样访问JSON数据。这可以通过定义一个类并重载__getattr____setattr__方法来实现。

代码示例:

class DynamicObject:
def__init__(self, dictionary):
        self.__dict__.update(dictionary)

def__getattr__(self, item):
return self.__dict__[item]

def__setattr__(self, key, value):
        self.__dict__[key]= value

json_string ='{"name": "张三", "age": 30, "city": "北京"}'
data = json.loads(json_string)
dynamic_data =DynamicObject(data)
print(dynamic_data.name)

输出结果:

张三

通过自定义DynamicObject类,我们可以像访问属性一样访问JSON数据,这种方式不仅提升了代码的可读性,也使得处理复杂嵌套结构的JSON数据更为便捷。这种技巧特别适用于需要频繁访问特定字段的场景,提高了代码的优雅度和效率。

2、面向对象方式处理JSON 🛰️

采用面向对象的方式处理JSON数据,可以增强代码的组织性和可读性,尤其是当数据模型复杂时。通过定义数据模型类 ,可以更好地封装数据逻辑和行为,便于维护和扩展。

2.1 创建JSON数据模型类

首先,根据JSON数据结构设计对应的Python类。每个类代表JSON中的一个对象类型,类的属性对应JSON中的键,而类的方法则可以用于处理数据或执行相关操作。

示例代码:

import json

classUser:
def__init__(self, data):
        self.name = data.get('name')
        self.email = data.get('email')
        self.is_active = data.get('is_active',False)

defdisplay_info(self):
"""展示用户信息"""
        status ="active"if 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/753846.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LLM大模型实战 —— DB-GPT阿里云部署指南

简介: DB-GPT 是一个实验性的开源应用,它基于FastChat,并使用vicuna-13b作为基础模型, 模型与数据全部本地化部署, 绝对保障数据的隐私安全。 同时此GPT项目可以直接本地部署连接到私有数据库, 进行私有数据处理, 目前已支持SQL生…

与国际接轨,与行业同行!2024深圳国际自有品牌展今日开幕!

2024深圳国际自有品牌展(Marca China International Private Label Fair,简称“Marca China”)于6月27日在深圳会展中心(福田)盛大开幕!来自零售、电商、品牌等渠道的买家与专业观众,以及来自全…

提高LabVIEW程序可靠性

​提高LabVIEW程序的可靠性是确保系统稳定运行、减少故障和维护成本的重要措施。以下从多个方面详细分析如何提高LabVIEW程序的可靠性 1. 选择合适的架构 1.1 状态机架构 适用情况: 多状态、多步骤操作。 具体例子:在一个自动测试系统中,…

数学建模---最小生成树问题的建模~~~~~Matlab代码

目录 1.相关概念 (1)什么是树 (2)生成树和最小生成树: 2.适用赛题 (1)赛题分类 (2)不同之处 3.两种算法 (1)prim算法 (2&…

PlatformIO开发环境

PlatformIO是一个开源的生态系统,用于构建物联网应用,它支持多种微控制器(MCU)和硬件开发板,并且与各种IDE集成良好,如VSCode, Atom等,使得跨平台的固件开发变得更加简单和高效。 ### 平台介绍…

计算机图形学入门21:辐射度量学

1.前言 在使用Blinn-Phong着色模型的时候,定义了一个光的强度I(Intensity),假如I等于10。那么I等于10是什么意思?它肯定有单位和物理意义。另一方面,whited-style光线追踪模型也不是准确的模型,因为做了很多假设&#…

VS Code快速选定当前括号中内容 快速选择当前行内容(必备)

文章目录 快速选定当前括号内容效果方法 快速选定当前行内容效果操作 快速选定当前括号内容 效果 方法 下载插件 默认快捷键选中当前括号内容 ctrl w 可修改快捷键 快速选定当前行内容 效果 操作 点击左键三次即可

鸿蒙HarmonyOS自定义组件开发和使用

自定义组件的介绍 在开发和使用自定义组件直接,我们需要了解什么是自定义组件? 在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常…

操作系统之《处理器机调度算法》【知识点+详细解题过程】

目录 PS:处理机调度算法相关公式: 1、【FCFS】先来先服务调度算法 2、【SJF(SPF)】短作业(进程)优先调度算法 3、【HRRF】最高响应比优先算法 4、【SRTF】最短剩余时间优先调度算法(抢占式&am…

图解支付账务系统入门

这篇文章主要从研发的视角讲清楚:账务相关的一些基础概念,账务系统核心的职责,以及一些关键模块的设计要点。 进入正题前,先讲个小故事。 几年前一个狂风暴雨电闪雷鸣的下午,老板把负责账务系统的技术经理炒了鱿鱼&a…

Android 14 独立编译 Setting apk

我们在setting 目录下是用 mm 会报错。 所以应该在 源码主目录 采用 make Settings 进行编译 很多时候如果在apk 目录下 mm 单独编译会出错, 都可以才用这种方式进行编译。

Electron录制应用-打包静态文件问题【命令行ffmpeg导不出视频】

问题描述 在开发环境下,所有功能都运行正常,但一旦进行打包并运行生产环境的版本,导出mp4视频的功能就失效了。没有文件生成,也没有任何错误提示。 排查问题 为了找到问题的根源,我首先决定通过日志来追踪。我使用了winston和winston-daily-rotate-file这两个强大的日志…

招聘,短信与您:招聘人员完整指南

招聘人员面临的最大挑战之一就是沟通和联系候选人。为何?我们可以从以下原因开始:候选人通常被太多的招聘人员包围,试图联系他们,这使得你很难吸引他们的注意。在招聘过程的不同阶段,根据不同的工作量,让申请人保持最…

HBuilder X 小白日记01

1.创建项目 2.右击项目&#xff0c;可创建html文件 3.保存CtrlS&#xff0c;运行一下 我们写的内容&#xff0c;一般是写在body里面 注释的快捷键&#xff1a;Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…

【R语言】plot输出窗口大小的控制

如果需要输出png格式的图片并设置dpi&#xff0c;可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小&#xff0c;在输出的时候保持宽度和高度一致即可&#xff0c;步骤如下&#xff1a; 如上的“10…

vue2axios的使用

1.安装axios npm i axios 2.配置代理服务器 1.在config.js中配置单个代理服务器 // 开启代理服务器 需要重新启动项目devServer: {proxy: http://localhost:5000}配置简单&#xff0c;请求资源时直接发给前端&#xff08;8080&#xff09;即可&#xff1b;但不能配置多个代理…

11.常见的Transforms(二)

常见的Transforms&#xff08;二&#xff09; 1.Resize() 的使用 1.1 作用 resize可以把输入的图片按照输入的参数值重新设定大小。 1.2 所需参数 需要输入想要重新设定的图片大小。 输入的参数类型可以为包含长和宽数值的一个序列&#xff08;h,w&#xff09;或者一个整…

css做旋转星球可举一反三

<!DOCTYPE html> <html lang"en"><head> <meta charset"UTF-8" /> <title>旋转的星球</title> <style type"text/css">.box {/*position: relative;*/position: absolute;width: 139px;height: 139p…

ASUS/华硕幻13 2022 GV301R系列 原厂Windows11系统

安装后恢复到您开箱的体验界面&#xff0c;带原机所有驱动和软件&#xff0c;包括myasus mcafee office 奥创等。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http:…

pdf合并,这三种方法学会了吗?

在信息爆炸的时代&#xff0c;PDF文档凭借其跨平台、不易修改的特性&#xff0c;成为了我们工作和学习中不可或缺的一部分。然而&#xff0c;当面对多个PDF文件需要合并成一个完整的文档时&#xff0c;许多人可能会感到头疼。今天&#xff0c;就让我们一起来探讨三种高效的PDF合…