Python?JSON數(shù)據(jù)解析過程(最新推薦)
一、JSON數(shù)據(jù)解析
在Python中解析JSON數(shù)據(jù)通常使用json
模塊。json
模塊提供了將JSON格式的數(shù)據(jù)轉(zhuǎn)換為Python對象(如列表、字典等)以及將Python對象轉(zhuǎn)換為JSON格式的數(shù)據(jù)的方法。
下面是一些使用json
模塊解析JSON數(shù)據(jù)的常見方法:
1. 讀取和解析JSON文件
如果JSON數(shù)據(jù)存儲在文件中,你可以使用json.load()
函數(shù)來讀取和解析文件內(nèi)容。
import json # 打開JSON文件并讀取內(nèi)容 with open('data.json', 'r') as file: data = json.load(file) # 現(xiàn)在data是一個(gè)Python對象(列表或字典),你可以像操作普通Python對象一樣操作它 print(data)
2. 字符串到Python對象的解析
如果JSON數(shù)據(jù)是字符串格式的,你可以使用json.loads()
函數(shù)來解析它。
import json # JSON字符串 json_string = '{"name": "John", "age": 30, "city": "New York"}' # 將JSON字符串解析為Python字典 data = json.loads(json_string) # 訪問解析后的數(shù)據(jù) print(data['name']) # 輸出: John
3. Python對象到JSON字符串的轉(zhuǎn)換
如果你想將Python對象轉(zhuǎn)換為JSON格式的字符串,可以使用json.dumps()
函數(shù)。
import json # Python字典 data = { 'name': 'John', 'age': 30, 'city': 'New York' } # 將Python字典轉(zhuǎn)換為JSON字符串 json_string = json.dumps(data) # 輸出JSON字符串 print(json_string) # 輸出: {"name": "John", "age": 30, "city": "New York"}
4. 錯誤處理
在解析JSON數(shù)據(jù)時(shí),如果數(shù)據(jù)格式不正確,json.load()
或json.loads()
會拋出json.JSONDecodeError
異常。為了處理這種情況,你可以使用try...except
語句來捕獲異常。
import json try: with open('data.json', 'r') as file: data = json.load(file) except json.JSONDecodeError as e: print(f"解析JSON時(shí)出錯: {e}")
5. JSON數(shù)據(jù)的格式化輸出
當(dāng)你需要將JSON數(shù)據(jù)以美觀的格式輸出時(shí),可以使用indent
參數(shù)。
import json data = { 'name': 'John', 'age': 30, 'city': 'New York' } # 以美觀的格式輸出JSON字符串 json_string = json.dumps(data, indent=4) print(json_string)
輸出將是格式化后的JSON字符串:
{ "name": "John", "age": 30, "city": "New York" }
以上就是在Python中解析JSON數(shù)據(jù)的基本方法。通過這些方法,你可以輕松地處理JSON格式的數(shù)據(jù)。
二、Python 編碼為 JSON 類型轉(zhuǎn)換對應(yīng)表
在Python中,將數(shù)據(jù)類型編碼為JSON格式時(shí),Python的內(nèi)置類型會與JSON類型之間有一個(gè)自然的映射關(guān)系。以下是Python數(shù)據(jù)類型和JSON類型之間的對應(yīng)關(guān)系:
Python 類型 | JSON 類型 | 示例 |
---|---|---|
dict | JSON object | {"name": "John"} |
list | JSON array | ["apple", "banana"] |
str | JSON string | "Hello, world!" |
int , float | JSON number | 42 , 3.14 |
bool | JSON boolean | True , False |
None | JSON null | null |
當(dāng)使用json.dumps()
函數(shù)將Python對象轉(zhuǎn)換為JSON字符串時(shí),Python會自動根據(jù)這些規(guī)則進(jìn)行類型轉(zhuǎn)換。同樣地,當(dāng)使用json.loads()
函數(shù)將JSON字符串解析為Python對象時(shí),也會根據(jù)這些規(guī)則進(jìn)行反序列化。
需要注意的是,一些Python對象類型(如自定義類、集合、日期等)在默認(rèn)情況下并不能直接轉(zhuǎn)換為JSON類型。對于這些類型,你需要自定義序列化函數(shù)或使用第三方庫(如pendulum
或marshmallow
)來處理它們的JSON轉(zhuǎn)換。
例如,自定義類通常需要實(shí)現(xiàn)一個(gè)to_dict()
方法,該方法將類的實(shí)例轉(zhuǎn)換為可以序列化為JSON的字典。對于日期對象,你可以使用datetime
模塊中的isoformat()
方法來獲得ISO 8601格式的字符串,這個(gè)字符串可以直接被轉(zhuǎn)換為JSON字符串。
以下是一個(gè)自定義類轉(zhuǎn)換為JSON的示例:
import json from datetime import datetime class Person: def __init__(self, name, birthdate): self.name = name self.birthdate = birthdate def to_dict(self): return { 'name': self.name, 'birthdate': self.birthdate.isoformat() } # 創(chuàng)建一個(gè)Person對象 person = Person('John Doe', datetime(1980, 1, 1)) # 將對象轉(zhuǎn)換為字典 person_dict = person.to_dict() # 將字典轉(zhuǎn)換為JSON字符串 json_string = json.dumps(person_dict) print(json_string)
輸出將是:
{"name": "John Doe", "birthdate": "1980-01-01T00:00:00"}
在這個(gè)例子中,Person
類有一個(gè)to_dict()
方法,它返回一個(gè)可以被json.dumps()
直接處理的字典。birthdate
屬性被轉(zhuǎn)換為ISO 8601格式的字符串,這是一個(gè)JSON兼容的日期格式。
三、JSON簡介
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它基于 ECMAScript(歐洲計(jì)算機(jī)協(xié)會制定的js規(guī)范)的一個(gè)子集,采用完全獨(dú)立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。
JSON 的結(jié)構(gòu)基于以下兩種類型:
值(Value):
- 字符串(在雙引號中)
- 數(shù)字(整數(shù)或浮點(diǎn)數(shù))
- 對象(在花括號中)
- 數(shù)組(在方括號中)
- 布爾值(
true
或false
) null
數(shù)據(jù)類型:
- 字符串:由雙引號包圍的任意數(shù)量的 Unicode 字符。
- 數(shù)字:整數(shù)或浮點(diǎn)數(shù)。
- 對象:無序的鍵值對集合,鍵是字符串,值可以是任意類型的 JSON 值。
- 數(shù)組:有序的值的集合,值可以是任意類型的 JSON 值。
- 布爾值:
true
或false
。 null
:表示空值或“無”值。
JSON 示例:
{ "name": "John", "age": 30, "city": "New York", "isStudent": false, "subjects": [ "Math", "Science", "English" ], "address": { "street": "123 Main St", "city": "New York", "state": "NY", "postalCode": "10001" } }
在這個(gè)示例中:
"name"
,"age"
,"city"
,"isStudent"
是鍵,它們的值分別是字符串、數(shù)字、字符串和布爾值。"subjects"
是一個(gè)數(shù)組,包含三個(gè)字符串元素。"address"
是一個(gè)對象,包含街道、城市、州和郵政編碼等鍵值對。
JSON 的特點(diǎn):
- 易于閱讀: JSON 的格式清晰且結(jié)構(gòu)化的方式使得數(shù)據(jù)易于人類閱讀和理解。
- 易于編寫和解析: 多種編程語言都有庫或內(nèi)置函數(shù)來解析和生成 JSON 數(shù)據(jù)。
- 數(shù)據(jù)交換: 由于其通用性,JSON 是一種理想的數(shù)據(jù)交換格式,可以在不同的系統(tǒng)和服務(wù)之間輕松交換數(shù)據(jù)。
- 語言無關(guān): JSON 是一種語言無關(guān)的數(shù)據(jù)格式,這意味著任何能夠處理文本的程序都可以處理 JSON。
JSON 的使用場景:
- Web 服務(wù)與客戶端之間的數(shù)據(jù)交換(如 AJAX 請求)。
- 配置文件的存儲和讀取。
- 數(shù)據(jù)持久化(如存儲到本地文件或數(shù)據(jù)庫中)。
- 跨平臺應(yīng)用程序之間的數(shù)據(jù)交換。
由于 JSON 的簡潔性和通用性,它已經(jīng)成為 Web 開發(fā)中非常流行的數(shù)據(jù)交換格式。
四、相關(guān)鏈接
- Python下載安裝中心
- Python官網(wǎng)
- Python軟件下載
- 「Python系列」Python簡介及案例
- 「Python系列」Python基礎(chǔ)語法/數(shù)據(jù)類型
- 「Python系列」Python解釋器
- 「Python系列」Python運(yùn)算符
- 「Python系列」Python數(shù)據(jù)結(jié)構(gòu)
- 「Python系列」Python元組
- 「Python系列」Python集合
- 「Python系列」Python列表
到此這篇關(guān)于Python JSON數(shù)據(jù)解析的文章就介紹到這了,更多相關(guān)Python JSON數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python存儲json數(shù)據(jù)發(fā)生亂碼的解決方法
- Python實(shí)現(xiàn)提取JSON文件中指定數(shù)據(jù)并保存至CSV或Excel內(nèi)
- 執(zhí)行python腳本并傳入json數(shù)據(jù)格式參數(shù)方式
- Python中使用json.load()和json.loads()加載json數(shù)據(jù)的方法實(shí)例
- 使用python如何提取JSON數(shù)據(jù)指定內(nèi)容
- Python解析JSON數(shù)據(jù)的基本方法實(shí)例代碼
- 詳解Python中如何將數(shù)據(jù)存儲為json格式的文件
- python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)
相關(guān)文章
選擇python進(jìn)行數(shù)據(jù)分析的理由和優(yōu)勢
在本篇文章中小編給大家整理了關(guān)于選擇python進(jìn)行數(shù)據(jù)分析的理由和優(yōu)勢,對此有需要的朋友們可以跟著學(xué)習(xí)參考下。2019-06-06python在屏幕上點(diǎn)擊特定按鈕或圖像效果實(shí)例
這篇文章主要給大家介紹了關(guān)于python在屏幕上點(diǎn)擊特定按鈕或圖像效果的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-09-09pandas進(jìn)行時(shí)間數(shù)據(jù)的轉(zhuǎn)換和計(jì)算時(shí)間差并提取年月日
這篇文章主要介紹了pandas進(jìn)行時(shí)間數(shù)據(jù)的轉(zhuǎn)換和計(jì)算時(shí)間差并提取年月日,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07keras的siamese(孿生網(wǎng)絡(luò))實(shí)現(xiàn)案例
這篇文章主要介紹了keras的siamese(孿生網(wǎng)絡(luò))實(shí)現(xiàn)案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06基于Python+Pyqt5開發(fā)一個(gè)應(yīng)用程序
今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著Python+Pyqt5開發(fā)一個(gè)應(yīng)用程序展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06tensorflow實(shí)現(xiàn)從.ckpt文件中讀取任意變量
這篇文章主要介紹了tensorflow實(shí)現(xiàn)從.ckpt文件中讀取任意變量,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05