目录
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