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

news/2024/10/5 23:15:36/

目录

json%E6%A8%A1%E5%9D%97%20%F0%9F%93%A6-toc" style="margin-left:40px;">1、基础访问:内置json模块 📦

json.loads%E8%BD%AC%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2-toc" style="margin-left:80px;">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模块 📦

json.loads%E8%BD%AC%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2">1.1 json.loads转换字符串

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

代码示例:

python">import jsonjson_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__方法来实现。

代码示例:

python">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]= valuejson_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中的键,而类的方法则可以用于处理数据或执行相关操作。

示例代码:

python">import jsonclassUser:
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 

http://www.ppmy.cn/news/1473421.html

相关文章

C++ 模板类与函数

模板类可以用于函数的参数和返回值,有三种形式: 1)普通函数,参数和返回值是模板类的实例化版本。 2)函数模板,参数和返回值是某种的模板类。 3)函数模板,参数和返回值是任意类型&…

如何使用 SwiftUI 构建 visionOS 应用

文章目录 前言WindowsVolumes沉浸式空间结论 前言 Apple Vision Pro 即将推出,现在是看看 SwiftUI API 的完美时机,这使我们能够将我们的应用程序适应 visionOS 提供的沉浸式世界。苹果表示,构建应用程序的最佳方式是使用 Swift 和 SwiftUI。…

《数据仓库与数据挖掘》 总复习

试卷组成 第一章图 第二章图 第三章图 第四章图 第五章图 第六章图 第九章图 第一章 DW与DM概述 (特点、特性) DB到DW 主要特征 (1)数据太多,信息贫乏(Data Rich, Information Poor)。 &a…

Java后端每日面试题(day3)

目录 Spring中Bean的作用域有哪些?Spring中Bean的生命周期Bean 是线程安全的吗?了解Spring Boot中的日志组件吗? Spring中Bean的作用域有哪些? Bean的作用域: singleton:单例,Spring中的bean默…

c++11新特性-7-委托构造函数与继承构造函数

文章目录 委托构造函数继承构造函数 委托构造函数 以前旧版 class Base { public:Base(int age){this->age age;}Base(int age,int num){this->age age;this->num num;}Base(int age,int num,int score){this->age age;this->num num;this->score sco…

浅谈如何在linux上部署java环境

文章目录 一、部署环境1.1、JDK1.2、Tomcat1.3、MySQL 二、将自己写的的程序部署到云服务器上 一、部署环境 为了在linux上部署 Java web 程序,需要安装一下环境。 1.1、JDK 直接使用 yum 命令安装 openjdk。我们 windows系统上 下载的是 oracle 官方的 jdk。而 …

10.10记录

云轴-电话面试 python- 深拷贝和浅拷贝 copy.copy():浅拷贝是创建一个新对象,但是新对象的元素是原对象的引用。也就是说,新对象和原对象共享同一块内存空间。当原对象的元素发生改变时,新对象的元素也会随之改变。 copy.deepco…

Ubuntu / Debian安装FTP服务

本章教程,记录在Ubuntu中安装FTP服务的具体步骤。FTP默认端口:21 1、安装 pure-ftpd sudo apt-get install pure-ftpd2、修改默认配置 # 与 centos 不同,这里需要在 /etc/pure-ftpd/conf 文件夹下执行下列命令,增加对应配置文件: # 创建 /etc/pure-ftpd/conf/PureDB 文件…