Python操作JSON文件的知識點(diǎn)整理
json 模塊
Python 提供了內(nèi)置的 json 模塊來處理 JSON 格式的文件。
該模塊主要分為讀取和寫入 JSON 文件。
讀取 JSON
使用 json.load() 或 json.loads() 方法來讀取 JSON 文件。
其中 json.load() 方法用于讀取文件中的 JSON 數(shù)據(jù),json.loads() 方法用于讀取字符串中的 JSON 數(shù)據(jù)。
寫入 JSON
使用 json.dump() 或 json.dumps() 方法來寫入 JSON 文件。
其中 json.dump() 方法用于寫入 JSON 數(shù)據(jù)到文件中,json.dumps() 方法用于將 JSON 數(shù)據(jù)轉(zhuǎn)換為字符串。
基于上述內(nèi)容可以總結(jié)一下: json.load() , json.loads() , json.dump() 和 json.dumps() 中的 s 都是字符串 string 的縮寫。
讀取與寫入基本用法如下
提前準(zhǔn)備一個(gè) travel.json 文件,存放到 python 文件所在目錄。
import json # 讀取json文件 with open('travel.json', 'r', encoding='utf-8') as f: data = json.load(f) # 寫入json文件 with open('travel.new.json', 'w', encoding='utf-8') as f: json.dump(data, f)
Tops:在使用 json.load() 和 json.loads() 讀取 json 文件時(shí),如果文件中存在格式錯(cuò)誤,會拋出 ValueError 異常。
json 模塊進(jìn)階用法
控制輸出格式
在處理 JSON 文件時(shí),還可以使用 json.dump() 方法的可選參數(shù)來控制輸出的格式,例如:
- sort_keys:按照鍵的字典序排序輸出。
- indent:縮進(jìn)輸出,可以指定縮進(jìn)的空格數(shù)。
import json # # 讀取json文件 with open('travel.json', 'r', encoding='utf-8') as f: data = json.load(f) with open('travel.new.json', 'w', encoding='utf-8') as f: json.dump(data, f, sort_keys=True, indent=4)
此時(shí)可以比對舊文件與新文件之間的差異,可以看到縮進(jìn)關(guān)系產(chǎn)生了變化。
在 JSON 中存儲 Python 特殊類型
如果你要在 json 中存儲 python 特殊類型,例如 datetime,需要使用 json.JSONEncoder 類和 json.JSONDecoder 類來處理。
import json from datetime import datetime # 日期編碼 class DateEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.strftime('%Y-%m-%d %H:%M:%S') return json.JSONEncoder.default(self, obj) d = {'date': datetime.now()} json_str = json.dumps(d, cls=DateEncoder) print(json_str) # 日期解碼 class DateDecoder(json.JSONDecoder): def __init__(self): json.JSONDecoder.__init__(self, object_hook=self.dict_to_object) def dict_to_object(self, d): if 'date' in d: d['date'] = datetime.strptime(d['date'], '%Y-%m-%d %H:%M:%S') return d data = json.loads(json_str, cls=DateDecoder) print(data)
運(yùn)行代碼,可以得到編碼和解碼的輸出。
{"date": "2023-01-27 21:24:46"}
{'date': datetime.datetime(2023, 1, 27, 21, 24, 46)}
對數(shù)據(jù)進(jìn)行驗(yàn)證和清洗
JSON Schema 是一種用于驗(yàn)證 JSON 文檔的標(biāo)準(zhǔn),它可以用來確保 JSON 文檔符合預(yù)期的格式。
jsonschema 模塊需要提前安裝,示例代碼如下。
import json import jsonschema schema = { "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "number"} }, "required": ["name", "age"] } data = '{"name": "夢想橡皮擦", "age": 28}' try: jsonschema.validate(json.loads(data), schema) print("可用的JSON") except jsonschema.exceptions.ValidationError as e: print(e)
當(dāng)你的 json 格式正確時(shí),會輸出相應(yīng)的內(nèi)容,輸出錯(cuò)誤信息,測試代碼可以將 "required": ["name", "age"] 修改為 "required": ["name", "age" , "sex"]。
第三方模塊
在處理 JSON 格式文件時(shí)還可以使用第三方庫來更方便地操作,例如 pandas。
import pandas as pd # 讀取json文件 data = pd.read_json('travel.json') # 寫入json文件 data.to_json('travel.pandas.json')
還有其他第三方庫也可以用來處理 JSON 格式文件,例如:
- ijson:迭代讀取大型 JSON 文件。
- jsonpickle:支持將 Python 對象序列化為 JSON 格式。
- jsonlines:簡單而高效地讀取和寫入文本文件中的 JSON 數(shù)據(jù)。
- simplejson:提供了一種比標(biāo)準(zhǔn)庫更快的 JSON 解析器和生成器。
- json-tricks:支持一些高級功能,例如壓縮和迭代。
到此這篇關(guān)于Python操作JSON文件的知識點(diǎn)整理的文章就介紹到這了,更多相關(guān)Python操作JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 使用 environs 庫定義環(huán)境變量的方法
這篇文章主要介紹了Python 使用 environs 庫來更好地定義環(huán)境變量,本節(jié)我們以 Python 項(xiàng)目為例,說說環(huán)境變量的設(shè)置。通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02深入探究Flask的兩個(gè)高級特性之藍(lán)圖和JWT認(rèn)證
本文將探討 Flask 的兩個(gè)高級特性:藍(lán)圖(Blueprints)和 JSON Web Token(JWT)認(rèn)證,藍(lán)圖讓我們可以將應(yīng)用模塊化,以便更好地組織代碼;而 JWT 認(rèn)證是現(xiàn)代 Web 應(yīng)用中常見的一種安全機(jī)制,感興趣的小伙伴跟著小編一起來看看吧2023-08-08使用Python的Matplotlib庫創(chuàng)建動(dòng)態(tài)圖表的技巧與實(shí)踐分享
在數(shù)據(jù)可視化領(lǐng)域,Matplotlib庫是Python中最流行和功能強(qiáng)大的工具之一,它能夠生成各種靜態(tài)圖表,如散點(diǎn)圖、折線圖和柱狀圖等,本文將介紹如何使用Matplotlib庫創(chuàng)建動(dòng)態(tài)圖表,并提供一些技巧和實(shí)踐經(jīng)驗(yàn),需要的朋友可以參考下2024-05-05Python實(shí)現(xiàn)一鍵整理百度云盤中重復(fù)無用文件
有沒有頭疼過百度云盤都要塞滿了,可是又沒有工具能剔除大量重復(fù)無用的文件?這里教你一個(gè)用Python實(shí)現(xiàn)的簡單方法,通過整理目錄的方式來處理我們云盤中無用的文件吧2022-08-08python?pip特殊用法之pip?install?-v?-e?.命令詳解
這篇文章主要給大家介紹了關(guān)于python?pip特殊用法之pip?install?-v?-e?.命令的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-09-09Python面向?qū)ο笾瓷?自省機(jī)制實(shí)例分析
這篇文章主要介紹了Python面向?qū)ο笾瓷?自省機(jī)制,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中的反射/自省機(jī)制概念、原理及相關(guān)屬性操作技巧,需要的朋友可以參考下2018-08-08Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解
本文主要介紹了Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02