发布时间:2025-02-06 12:01
前言:
如何将一个JSON文档映射为Python对象主要包括一下三个部分:
供我们读取的JSON文件是test.json,文件内容如下:
{ \"name\": \"孤寒者\", \"age\": 18, \"height\": 130 }
首先,我们可以通过json模块的loads()方法将JSON文档转为Python字典类型:
# coding=utf-8 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对象。分析思路:
__init__()
方法中的第二个参数,即d。而这个d其实就是包含了这个JSON文档的字典对象,我们又在__init__()
方法中将d赋值给了__dict__
(就相当于你一个个写类里面的属性名=属性值),这就会将字典里的key和value映射为Product对象里的属性和属性值。# coding=utf-8 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 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__
。
包括以下三点考点:
使用dumps()函数,关键点是使用转换函数~
# coding=utf-8 import json class Product: def __init__(self, name, age, height): self.name = name self.age = age self.height = height product = Product(\'孤寒者\', 18, 130) def product2Dict(obj): return { \'name\': obj.name, \'age\': obj.age, \'height\': obj.height } # dumps()方法的default参数指定转换函数。 jsonStr = json.dumps(product, default=product2Dict, ensure_ascii=False) print(jsonStr) print(type(jsonStr))
[ { \"name\": \"孤寒者\", \"age\": 18, \"height\": 130 }, { \"name\": \"小张\", \"age\": 18, \"height\": 80 } ]
# coding=utf-8 import json class Product: def __init__(self, d): self.__dict__ = d with open(\'test.json\', \'r\', encoding=\'utf-8\') as f: jsonStr = f.read() products = json.loads(jsonStr, object_hook=Product) print(products)
上面截图可以看出来我们确实已经将JSON文档转为对象列表了~ 下面开始解题:
# coding=utf-8 import json class Product: def __init__(self, d): self.__dict__ = d with open(\'test.json\', \'r\', encoding=\'utf-8\') as f: jsonStr = f.read() products = json.loads(jsonStr, object_hook=Product) print(products) for product in products: print(product.name) print(\"*\"*25) # 解题部分: def product2Dict(obj): return { \'name\': obj.name, \'age\': obj.age, \'height\': obj.height } jsonStr = json.dumps(products, default=product2Dict, ensure_ascii=False) print(jsonStr) print(type(jsonStr))
到此这篇关于利用python实现JSON文档与Python对象互相转换的文章就介绍到这了,更多相关JSON映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!