在 Python 中有效使用 JSON 的6個(gè)技巧
點(diǎn)擊下面卡片關(guān)注“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
JSON(JavaScript對(duì)象表示法的縮寫)是一種開放標(biāo)準(zhǔn)。雖然它的名字并不意味著這樣,但它是一種獨(dú)立于語(yǔ)言的數(shù)據(jù)格式。JSON 用于存儲(chǔ)和交換數(shù)據(jù)。它是一種流行的數(shù)據(jù)格式,因?yàn)樗埠苋菀诪槿祟愖x寫。在 Python 中使用 JSON 非常簡(jiǎn)單!Python 有兩種數(shù)據(jù)類型,它們組成了在 Python 中使用 JSON 的完美工具: dictionary 和 lists。
用 Python 導(dǎo)入 JSON 庫(kù)
Python 附帶了一個(gè)強(qiáng)大而優(yōu)雅的 JSON 庫(kù),可以幫助你對(duì) JSON 進(jìn)行解碼和編碼。它可以通過(guò)以下方式導(dǎo)入:
import json1. 如何在 Python 中解析 JSON
解析 JSON 數(shù)據(jù)的字符串(也稱為解碼 JSON)就像使用 JSON.load (...)(load 是 load string 的縮寫)一樣簡(jiǎn)單。
下面是一個(gè)使用 json.loads 的例子:
> jsonstring = '{"name": "erik", "age": 38, "married": true}'> data = json.loads(jsonstring)> print(data){'name': 'erik', 'age': 38, 'married': True}
輸出可能看起來(lái)像字符串,但實(shí)際上它是一個(gè)字典,我們可以在代碼中使用它,例如:
> type(data)<class 'dict'>> print('Hello', data['name'], "you're", data['age'], 'years old')Hello erik you're 38 years old
2. 用 Python 編碼 JSON
使用Python編碼JSON數(shù)據(jù)就像解碼一樣容易。使用 json.dumps (...)(“ dump to string”的縮寫)將包含 dictionary、 lists 和其他類型的 Python 對(duì)象轉(zhuǎn)換為字符串:
data = {'name': 'erik', 'age': 38, 'married': True} >>>json.dumps(data) '{"name": "erik", "age": 38, "married": true}'
這是同一個(gè)文檔,轉(zhuǎn)換回一個(gè)字符串!如果你想讓 JSON 文檔對(duì)于人們來(lái)說(shuō)更具可讀性,請(qǐng)使用縮進(jìn)選項(xiàng)。它將很好地格式化 JSON,使用空格字符:
> data = {'name': 'erik', 'age': 38, 'married': True}> print(json.dumps(data, indent=2)){"name": "erik","age": 38,"married": true}
3. 使用 JSON 模塊漂亮地打印 JSON
Python 的 JSON 模塊也可以在命令行中使用:
$ echo "{ \"name\": \"Monty\", \"age\": 45 }" | \ python3 -m json.tool{"name": "Monty","age": 45}
如果你對(duì)此感興趣,可以嘗試使用jq工具。
4. 如何用 python 讀取 JSON 文件
除了 json.loads 之外,還有一個(gè)名為 json.load 的函數(shù)(不帶 s)。它將從文件中加載數(shù)據(jù)。如果你想把 JSON 文件的內(nèi)容讀入 Python 并解析它,可以使用下面的例子:
with open('data.json') as json_file:data = json.load(json_file)...
5. 如何在 Python 中將 JSON 寫入文件
json.dump函數(shù)用于將數(shù)據(jù)寫入JSON文件。
data = {'name': 'Eric', 'age': 38 }with open('data.json', 'w') as json_file:json.dump(data, json_file)
6. 使用 JMESPath 搜索 JSON

JMESPath是JSON的查詢語(yǔ)言。它允許你輕松地從 JSON 文檔中獲取所需的數(shù)據(jù)。如果你以前使用過(guò) JSON,你可能知道獲取嵌套值很容易。
例如: doc [“ person”][“ age”]會(huì)在一個(gè)文檔中給出年齡的嵌套值,如下所示:
{"persons": {"name": "erik","age": "38"}}
但是如果你想從一組人中提取出所有的年齡字段,在一個(gè)文檔中像這樣:
{"persons": [{ "name": "erik", "age": 38 },{ "name": "john", "age": 45 },{ "name": "rob", "age": 14 }]}
我們可以編寫一個(gè)簡(jiǎn)單的循環(huán),遍歷所有的人。但是循環(huán)速度很慢,給代碼帶來(lái)了復(fù)雜性。這就是 JMESPath 的用武之地!
這個(gè) JMESPath 表達(dá)式可以完成任務(wù):
persons[*].age它將返回一個(gè)包含所有年齡段的數(shù)組: [38,45,14]。
假設(shè)你想過(guò)濾這個(gè)列表,只得到名為‘erik’的人的年齡。你可以使用一個(gè)過(guò)濾器:
persons[?name=='erik'].age看看這是多么自然和快捷!
JMESPath不是Python標(biāo)準(zhǔn)庫(kù)的一部分,這意味著你需要使用pip來(lái)安裝它。
$ pip3 install jmespath$ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)> import jmespath> j = { "people": [{ "name": "erik", "age": 38 }] }> jmespath.search("people[*].age", j)[38]>
個(gè)人微信(如果沒(méi)有備注不拉群!) 請(qǐng)注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
下載1:何愷明頂會(huì)分享
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析
下載2:終身受益的編程指南:Google編程風(fēng)格指南
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):c++,即可下載。歷經(jīng)十年考驗(yàn),最權(quán)威的編程規(guī)范!
下載3 CVPR2021 在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):CVPR,即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文 點(diǎn)亮
,告訴大家你也在看

,告訴大家你也在看