Python中利用json庫進(jìn)行JSON數(shù)據(jù)處理詳解
Python的json庫用于處理JSON(JavaScript Object Notation)數(shù)據(jù)格式。JSON是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時也易于機(jī)器解析和生成。Python的json庫提供了函數(shù)來編碼(將Python對象轉(zhuǎn)換為JSON字符串)和解碼(將JSON 字符串轉(zhuǎn)換為Python對象)JSON數(shù)據(jù)。
編碼Python對象為JSON字符串
使用json.dumps()方法將Python對象編碼為JSON字符串:
import json data = { "name": "Morris", "age": 18, "mail": "Morris@18.com" } # dict -> json str = json.dumps(data, indent=4) print(str) arr = [data, data] # list -> json arr_str = json.dumps(arr, indent=4) print(arr_str)
運(yùn)行結(jié)果如下:
{
"name": "Morris",
"age": 18,
"mail": "Morris@18.com"
}
[
{
"name": "Morris",
"age": 18,
"mail": "Morris@18.com"
},
{
"name": "Morris",
"age": 18,
"mail": "Morris@18.com"
}
]
indent參數(shù)用于美化輸出,使JSON字符串更具可讀性。
解碼JSON字符串為Python對象
使用json.loads()方法將JSON字符串解碼為Python對象(通常是字典或列表):
import json object_str = """ { "name": "Morris", "age": 18, "mail": "Morris@18.com" } """ obj = json.loads(object_str) print(obj) array_str = """ [ { "name": "Morris", "age": 18, "mail": "Morris@18.com" }, { "name": "Morris", "age": 18, "mail": "Morris@18.com" } ] """ arr = json.loads(array_str) print(arr)
運(yùn)行結(jié)果如下:
{'name': 'Morris', 'age': 18, 'mail': 'Morris@18.com'}
[{'name': 'Morris', 'age': 18, 'mail': 'Morris@18.com'}, {'name': 'Morris', 'age': 18, 'mail': 'Morris@18.com'}]
將Python對象寫入JSON文件
json.dump()函數(shù)也是用于將Python對象編碼成JSON格式,但它直接將編碼后的數(shù)據(jù)寫入到一個文件中,而不是返回字符串。
import json data = { "name": "Morris", "age": 18, "mail": "Morris@18.com" } ???????# dict -> json file with open('data.json', 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=4)
從文件中讀取JSON數(shù)據(jù)
使用json.load()方法從文件中讀取JSON數(shù)據(jù)并將其解析為Python對象:
import json # json file -> dict with open('data.json', 'r', encoding='utf-8') as f: obj = json.load(f) print(obj)
運(yùn)行結(jié)果如下:
{'name': 'Morris', 'age': 18, 'mail': 'Morris@18.com'}
處理復(fù)雜對象
有時你可能需要處理包含復(fù)雜對象(如自定義類實(shí)例)的JSON數(shù)據(jù)。你可以通過實(shí)現(xiàn)自定義的編碼器和解碼器來處理這些對象。
自定義編碼器
要實(shí)現(xiàn)自定義編碼器,你需要創(chuàng)建一個繼承自json.JSONEncoder的類,并重寫default方法:
import json from datetime import datetime class CustomEncoder(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) data = { "name": "Morris", "timestamp": datetime.now() } json_str = CustomEncoder().encode(data) print(json_str)
運(yùn)行結(jié)果如下:
{"name": "Morris", "timestamp": "2024-12-31 14:16:55"}
自定義解碼器
要實(shí)現(xiàn)自定義解碼器,你需要創(chuàng)建一個繼承自json.JSONDecoder的類,并重寫object_hook或object_pairs_hook方法:
import json from datetime import datetime def datetime_parser(dct): for key, value in dct.items(): if isinstance(value, str): try: # 假設(shè)日期格式是 "YYYY-MM-DD" dct[key] = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") except ValueError: # 如果不是日期格式,則保持原樣 pass return dct json_str = """ { "name": "Morris", "timestamp": "2024-12-31 14:16:55" } """ data = json.loads(json_str, object_hook=datetime_parser) print(data) print(data['timestamp'])
運(yùn)行結(jié)果如下:
{'name': 'Morris', 'timestamp': datetime.datetime(2024, 12, 31, 14, 16, 55)}
2024-12-31 14:16:55
以上就是Python中利用json庫進(jìn)行JSON數(shù)據(jù)處理詳解的詳細(xì)內(nèi)容,更多關(guān)于Python JSON數(shù)據(jù)處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pandas將DataFrame的幾列數(shù)據(jù)合并成為一列
本文主要介紹了pandas將DataFrame的幾列數(shù)據(jù)合并成為一列,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Python for Informatics 第11章之正則表達(dá)式(四)
這篇文章主要介紹了Python for Informatics 第11章之正則表達(dá)式(四) 的相關(guān)資料,需要的朋友可以參考下2016-04-04pandas實(shí)現(xiàn)excel表格處理并讀取指定sheet的方法
這篇文章主要介紹了pandas實(shí)現(xiàn)excel表格處理并讀取指定sheet的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02python怎樣判斷一個數(shù)值(字符串)為整數(shù)
這篇文章主要介紹了python怎樣判斷一個數(shù)值(字符串)為整數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02python中如何使用正則表達(dá)式提取數(shù)據(jù)
這篇文章主要介紹了python中如何使用正則表達(dá)式提取數(shù)據(jù)問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02Tensorflow中tf.ConfigProto()的用法詳解
今天小編就為大家分享一篇Tensorflow中tf.ConfigProto()的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02爬蟲訓(xùn)練前端基礎(chǔ)Bootstrap5排版表格圖像
這篇文章主要為大家介紹了爬蟲訓(xùn)練前端基礎(chǔ)Bootstrap5排版表格圖像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02