Python

Python基础(31) - 将JSON文档映射成Python对

2020-03-07  本文已影响0人  xianling_he

将JSON文档映射成Python对象

读取JSON文档

import json

f = open('C:\\PyTest\\Selenium_OpenSchools\\test_selenium\\03-数据存储\\files\\product.json','r')
jsonStr = f.read()
print('josnStr:',jsonStr)
print('-'*20)
hexianling.png

返回这个时候的对象类型,发现是字典对象类型,并非是python对象

product = json.loads(jsonStr)
print(type(product))
hexianling.png

如果使用字典,取值方法

print(product['name'])
print(product['price'])
print(product['count'])
hexianling.png

自定义一个类,需要跟json名字相同

class Product:
    def __init__(self,d):
        self.__dict__ = d #将属性传给构建的字典

将json.loads方法中引用object_hook

product = json.loads(jsonStr,object_hook=Product) # 创建一个钩子,将Product对象引入
hexianling.png

创建成python对象后,读取值

print('-'*20)
print(product.name)
print(product.price)
print(product.count)
hexianling.png

完整的示例代码如下:

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)
hexianling.png

第二种方式:使用创建的函数进行转换

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)
hexianling.png

总结

1.JSON模块的loads函数可以装载JSON文档,并将其转换成JSON对象。

  1. 通过object_hook 参数指定钩子对象,然后在类的构造方法中将传入的JSON对象赋给内部变量'_dict_'
上一篇 下一篇

猜你喜欢

热点阅读