<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32: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對映內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45