将JSON文档映射成Python对象
读取JSON文档
- 导入json模块
- 读取文件信息 open('地址','r')
- 返回json字符串,f.read()
import json
f = open('C:\\PyTest\\Selenium_OpenSchools\\test_selenium\\03-数据存储\\files\\product.json','r')
jsonStr = f.read()
print('josnStr:',jsonStr)
print('-'*20)

返回这个时候的对象类型,发现是字典对象类型,并非是python对象
- 使用json.load 返回对象类型
product = json.loads(jsonStr)
print(type(product))

如果使用字典,取值方法
print(product['name'])
print(product['price'])
print(product['count'])

自定义一个类,需要跟json名字相同
- 创建一个构造类Product
- 创建一个参数,将字典传入使用
- 将值传给内部的字典
class Product:
def __init__(self,d):
self.__dict__ = d #将属性传给构建的字典
将json.loads方法中引用object_hook
- 将创建的字典jsonStr作为第一个参数传入到class
- object_hook 将读取的product作为钩子引入
product = json.loads(jsonStr,object_hook=Product) # 创建一个钩子,将Product对象引入

创建成python对象后,读取值
print('-'*20)
print(product.name)
print(product.price)
print(product.count)

完整的示例代码如下:
import json
class Product:
def __init__(self,d):
self.__dict__ = d #将属性传给构建的字典
f = open('C:\\PyTest\\Selenium_OpenSchools\\test_selenium\\03-数据存储\\files\\product.json','r')
jsonStr = f.read()
print('josnStr:',jsonStr)
print('-'*20)
product = json.loads(jsonStr,object_hook=Product)
print(type(product))
print('-'*20)
print(product.name)
print(product.price)
print(product.count)
print('-'*20)

第二种方式:使用创建的函数进行转换
import json
class Product:
def __init__(self,d):
self.__dict__ = d #将属性传给构建的字典
f = open('C:\\PyTest\\Selenium_OpenSchools\\test_selenium\\03-数据存储\\files\\product.json','r')
jsonStr = f.read()
print('josnStr:',jsonStr)
print('-'*20)
def json2product(d):
return Product(d)
prodNew = json.loads(jsonStr,object_hook=json2product)
print(prodNew.name)

总结
1.JSON模块的loads函数可以装载JSON文档,并将其转换成JSON对象。
- 通过object_hook 参数指定钩子对象,然后在类的构造方法中将传入的JSON对象赋给内部变量'_dict_'
网友评论