Python面试必考重点之数据存储第三关——如何将一个JSON文档映射为Python对象
Posted 孤寒者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面试必考重点之数据存储第三关——如何将一个JSON文档映射为Python对象相关的知识,希望对你有一定的参考价值。
面试题第三关:
第一部分——考点:
- loads函数的用法。
第二部分——面试题:
1.面试题一:如何将一个JSON文档映射为Python对象?
第三部分——解析:
面试题一 之 将一个JSON文档映射为Python对象:
第一种方法:
- 供我们读取的JSON文件是test.json,文件内容如下:
"name": "孤寒者",
"age": 18,
"height": 130
首先,我们可以通过json模块的loads()方法将JSON文档转为Python字典类型:
# coding=utf-8
# _author__ = 孤寒者
import json
with open('test.json', 'r', encoding='utf-8') as f:
jsonStr = f.read()
product = json.loads(jsonStr)
print(type(product))
print(product['name'])
我们在loads()方法里使用对象钩子即可实现将一个JSON文档映射为Python对象。分析思路:
- 我们使用对象钩子实质上总共做了两步:先通过loads()方法将JSON文档转换为dict对象,然后将这个dict对象同时创建Product对象->将dict对象作为参数传入Product对象的构造方法
__init__()
方法中的第二个参数,即d。而这个d其实就是包含了这个JSON文档的字典对象,我们又在__init__()
方法中将d赋值给了__dict__
(就相当于你一个个写类里面的属性名=属性值),这就会将字典里的key和value映射为Product对象里的属性和属性值。
# coding=utf-8
# _author__ = 孤寒者
import json
class Product:
def __init__(self, d):
self.__dict__ = d
with open('test.json', 'r', encoding='utf-8') as f:
jsonStr = f.read()
product = json.loads(jsonStr, object_hook=Product)
print(type(product))
# print(product['name']) # 这样就不行了~
print(product.name)
第二种方法:
也是使用了对象钩子,不过与第一种方法不同的是,此时对象钩子指定的不再是类,而是指定一个转换函数,通过这个函数返回对象。
# coding=utf-8
# _author__ = 孤寒者
import json
class Product:
def __init__(self, d):
self.__dict__ = d
with open('test.json', 'r', encoding='utf-8') as f:
jsonStr = f.read()
def json2Product(d):
return Product(d)
product1 = json.loads(jsonStr, object_hook=json2Product)
print(type(product1))
print(product1.name)
第四部分——总结:
- json模块的loads函数可以装载JSON文档,并将其转换为JSON对象。关键需要通过object_hook参数指定钩子对象,然后在类的构造方法中将传入的JSON对象赋给内部变量
__init__
。
以上是关于Python面试必考重点之数据存储第三关——如何将一个JSON文档映射为Python对象的主要内容,如果未能解决你的问题,请参考以下文章
Python面试必考重点之字符串与正则表达式第三关——python字符串支持的基本操作
Python面试必考重点之列表,元组和字典第三关——连接两个列表的方式有哪些/这些连接方式有什么区别
Python面试必考重点之列表,元组和字典第十三关——有哪些数据类型不能作为字典键值的类型/为什么列表和字典类型的值不能作为字典的键值
Python面试必考重点之数据存储第二关——XML文档和字典的互转