首頁 > 後端開發 > Python教學 > 在Python中使用JSON文件,並提供示例

在Python中使用JSON文件,並提供示例

Christopher Nolan
發布: 2025-02-16 09:47:09
原創
183 人瀏覽過

Working with JSON Files in Python, with Examples

Python 中的 JSON:全面指南

JSON(JavaScript 對象表示法)是一種與語言無關的數據交換格式,廣泛用於在客戶端和服務器之間傳輸數據。 Python 通過多個模塊支持 JSON,其中“json”和“simplejson”最為流行。

Python 內置的“json”模塊提供讀取和寫入 JSON 文件的方法。 “json.load()”方法用於從文件中讀取 JSON 數據,“json.dump()”方法用於將 JSON 數據寫入文件。

Python 對象可以通過序列化過程轉換為 JSON 格式,使用“json.dump()”或“json.dumps()”方法。相反,JSON 數據可以通過反序列化過程轉換回 Python 對象,使用“json.load()”或“json.loads()”方法。

Python 和 JSON 數據類型具有等效項。例如,Python 的“dict”等效於 JSON 的“object”,而 Python 的“list”或“tuple”等效於 JSON 的“array”。此映射有助於 Python 和 JSON 之間的轉換過程。

在本教程中,我們將學習如何使用相關的示例在 Python 中讀取、寫入和解析 JSON。我們還將探討 Python 中用於處理 JSON 的常用模塊。

JSON 是一種輕量級的數據交換格式。它是用於在客戶端和服務器之間傳輸和接收數據的常用格式。但是,它的應用和用途不僅僅限於傳輸數據。機器可以輕鬆生成和解析 JSON 數據。 JSON 首字母縮寫詞代表 JavaScript 對象表示法,顧名思義,它是 JavaScript 編程語言的一個子集。

JSON 是一種標準化的數據交換格式,並且與語言無關。幾乎所有編程語言都以某種方式支持它。它具有以下結構:

  • 它左側有一個左大括號,右側有一個右大括號。
  • 它有一組名稱/值對。
  • 每個名稱都用冒號“:”與它的值分隔。
  • 每個名稱/值對都用逗號 (,) 分隔。

下面是一個 JSON 對象的片段:

{
    "name": "Chinedu Obi",
    "age": 24,
    "country": "Nigeria",
    "languages": [
        "Igbo",
        "English",
        "Yoruba"
    ],
    "marital status": "single",
    "employee": true,
    "experience": [
        {
            "title": "Frontend Engineering Intern",
            "company": "Andela"
        },
        {
            "title": "Frontend Engineer",
            "company": "Paystack"
        }
    ]
}
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

為了以後的代碼示例的目的,我們將假設上述 JSON 存儲在一個名為 employee.json 的文件中。

JSON 數據類型

在使用 JSON 對象時,Python 會將 JSON 數據類型轉換為其等效項,反之亦然。下表顯示了 Python 數據類型及其 JSON 等效項。

Python JSON 等效项
dict object
list, tuple array
str string
int, float, long number
True true
False false
None null

Python 中 json 和 simplejson 模塊的區別

Python 中有幾個模塊用於編碼和解碼 JSON。兩個最流行的模塊是 json 和 simplejson。 json 模塊是 Python 標準庫中的內置包,這意味著我們可以直接使用它,無需安裝。

simplejson 模塊是用於編碼和解碼 JSON 的外部 Python 模塊。它是一個開源包,與 Python 2.5 和 Python 3.3 向後兼容。它還快速、簡單、正確且可擴展。

simplejson 更新更頻繁,比 json 具有更新的優化,使其速度更快。如果您在遺留項目中使用的是低於 2.6 的舊版 Python,那麼 simplejson 是您的最佳選擇。

在本教程中,我們將堅持使用 json 模塊。

如何在 Python 中讀取和寫入 JSON 文件

在使用 Python 編程時,我們經常會遇到 JSON 數據格式,了解如何讀取或寫入 JSON 數據和文件非常重要。此處對 Python 中文件處理的預先了解將有助於讀取和寫入 JSON 文件。

如何在 Python 中讀取 JSON 文件

與 Python 中的每個其他讀取操作一樣,with 語句可以與 json.load() 方法一起使用來讀取 JSON 文件。

請參見下面的代碼示例:

{
    "name": "Chinedu Obi",
    "age": 24,
    "country": "Nigeria",
    "languages": [
        "Igbo",
        "English",
        "Yoruba"
    ],
    "marital status": "single",
    "employee": true,
    "experience": [
        {
            "title": "Frontend Engineering Intern",
            "company": "Andela"
        },
        {
            "title": "Frontend Engineer",
            "company": "Paystack"
        }
    ]
}
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

以下是上面代碼的輸出:

import json

with open('employee.json', 'r', encoding='utf-8') as file_object:
    employee_dict = json.load(file_object)
    print(employee_dict)
登入後複製
登入後複製
登入後複製
登入後複製

在上面的代碼中,我們以讀取模式打開 employee.json 文件。 json.load() 方法將 JSON 數據解碼為存儲在 employee_dict 變量中的 Python 字典。

如何在 Python 中將 JSON 寫入文件

我們還可以對 Python 中的文件執行 JSON 數據的寫入操作。與讀取操作一樣,我們使用 with 語句和 json.dump() 方法將 JSON 數據寫入文件。

考慮下面的代碼片段:

<code>{'name': 'Chinedu Obi', 'age': 24, 'country': 'Nigeria', 'languages': ['Igbo', 'English', 'Yoruba'], 'marital status': 'single', 'employee': True, 'experience': [{'title': 'Frontend Engineering Intern', 'company': 'Andela'}, {'title': 'Frontend Engineer', 'company': 'Paystack'}]}</code>
登入後複製
登入後複製
登入後複製
登入後複製

在這裡,我們創建一個 Python 字典 mother,其中包含有關虛構母親的數據。我們以寫入模式打開 mother.json。由於沒有這樣的文件,因此會為我們創建一個文件。 json.dump() 方法將分配給 mother 變量的 Python 字典編碼為 JSON 等效項,該等效項將寫入指定的文件。執行上述代碼後,將出現在我們文件夾根目錄中,其中包含 JSON 數據的 mother.json 文件。

如何將 Python 字典轉換為 JSON(序列化)

序列化是將 Python 對象(在大多數情況下是字典)轉換為 JSON 格式化數據或字符串的過程。序列化時,Python 類型將編碼為 JSON 等效項。 json 模塊提供兩種方法——json.dump() 和 json.dumps()——用於將 Python 對象序列化為 JSON 格式。

  • json.dump() 用於將 Python 對象的 JSON 等效項寫入文件。
  • json.dumps()(帶“s”)用於將 Python 對象轉換為 JSON 格式的字符串。

請注意以下語法:

import json

mother = {
    "name": "Asake Babatunde",
    "age": 28,
    "marital status": "Married",
    "children": ["Ayo", "Tolu", "Simi"],
    "staff": False,
    "next of kin": {"name": "Babatune Lanre", "relationship": "husband"},
}

with open("mother.json", "w", encoding="utf-8") as file_handle:
    json.dump(mother, file_handle, indent=4)
登入後複製
登入後複製
登入後複製
登入後複製
json.dump(obj, fp, indent)
登入後複製
登入後複製
登入後複製
登入後複製

json.dump() 方法有一個參數 fp,而 json.dumps() 沒有。

一些參數解釋:

  • obj:要序列化為 JSON 格式的 Python 對象。
  • fp:具有 read() 或 write() 等方法的文件指針(對象)。
  • indent:非負整數或字符串,指示漂亮打印 JSON 數據的縮進級別。

示例:使用 json.dump() 將 Python 對象轉換為 JSON 格式

讓我們將 Python 對象編碼為等效的 JSON 格式化數據並將其寫入文件。

首先,我們創建一個 Python 字典:

{
    "name": "Chinedu Obi",
    "age": 24,
    "country": "Nigeria",
    "languages": [
        "Igbo",
        "English",
        "Yoruba"
    ],
    "marital status": "single",
    "employee": true,
    "experience": [
        {
            "title": "Frontend Engineering Intern",
            "company": "Andela"
        },
        {
            "title": "Frontend Engineer",
            "company": "Paystack"
        }
    ]
}
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

讓我們將我們的字典編碼為 JSON 數據並寫入文件:

import json

with open('employee.json', 'r', encoding='utf-8') as file_object:
    employee_dict = json.load(file_object)
    print(employee_dict)
登入後複製
登入後複製
登入後複製
登入後複製

在上面的示例中,我們將字典、文件指針和縮進參數傳遞給 json.dump 方法。以下是我們代碼的輸出。執行代碼後,在我們的項目根文件夾中會找到包含預期 JSON 數據的 subject.json 文件:

<code>{'name': 'Chinedu Obi', 'age': 24, 'country': 'Nigeria', 'languages': ['Igbo', 'English', 'Yoruba'], 'marital status': 'single', 'employee': True, 'experience': [{'title': 'Frontend Engineering Intern', 'company': 'Andela'}, {'title': 'Frontend Engineer', 'company': 'Paystack'}]}</code>
登入後複製
登入後複製
登入後複製
登入後複製

我們的輸出具有漂亮的打印輸出,因為我們添加了值為 4 的縮進參數。

示例:使用 json.dumps() 將 Python 對象轉換為 JSON 格式

在此示例中,我們將 Python 對象編碼為 JSON 字符串。我們之前創建了一個 subject 字典,因此我們可以在此處重複使用它。

讓我們以 json.dumps() 方法為例:

import json

mother = {
    "name": "Asake Babatunde",
    "age": 28,
    "marital status": "Married",
    "children": ["Ayo", "Tolu", "Simi"],
    "staff": False,
    "next of kin": {"name": "Babatune Lanre", "relationship": "husband"},
}

with open("mother.json", "w", encoding="utf-8") as file_handle:
    json.dump(mother, file_handle, indent=4)
登入後複製
登入後複製
登入後複製
登入後複製

以下是上面代碼的輸出:

json.dump(obj, fp, indent)
登入後複製
登入後複製
登入後複製
登入後複製

如前所述,json.dumps() 方法用於將 Python 對象轉換為 JSON 格式的字符串。我們可以從控制台中看到我們的 JSON 數據的類型為 str。

如何將 JSON 轉換為 Python 字典(反序列化)

JSON 的反序列化是將 JSON 對象解碼為等效的 Python 對像或 Python 類型。我們可以使用 json 模塊提供的兩種方法——json.load() 和 json.loads()——將 JSON 格式化數據轉換為 Python 對象。

  • json.load() 用於從文件中讀取 JSON 格式化數據。
  • json.loads()(帶“s”)用於將 JSON 字符串解析為 Python 字典。

請注意以下語法:

json.dumps(obj, indent)
登入後複製
登入後複製
import json

subject = {
    "name": "Biology",
    "teacher": {"name": "Nana Ama", "sex": "female"},
    "students_size": 24,
    "elective": True,
    "lesson days": ["Tuesday", "Friday"],
}
登入後複製
登入後複製

json.dump() 有一個參數 fp,而 json.dumps() 有一個參數 s。其他參數保持不變。

一些參數解釋:

  • fp:具有 read() 或 write() 等方法的文件指針(對象)。
  • s:包含 JSON 文檔的 str、bytes 或 bytearray 實例。

示例:使用 json.load() 將 JSON 對象轉換為 Python 對象

以下是名為 students.json 的新 JSON 文件的內容:

with open('subject.json', 'w', encoding='utf-8') as file_handle:
    json.dump(subject, file_handle, indent=4)
登入後複製

在此示例中,我們將從 students.json 文件解碼 JSON 數據到 Python 對象:

{
    "name": "Biology",
    "teacher": {
        "name": "Nana Ama",
        "sex": "female"
    },
    "students_size": 24,
    "elective": true,
    "lesson days": [
        "Tuesday",
        "Friday"
    ]
}
登入後複製

以下是上面代碼的輸出:

json_data = json.dumps(subject, indent=4)
print(json_data)
print(type(json_data))
登入後複製

在上面的代碼片段中,正在解析包含學生列表的 JSON 文件。來自 file_handle 文件的 JSON 數據將傳遞給 json.load() 方法,該方法將其解碼為 Python 字典列表。然後將列表項打印到控制台。

示例:使用 json.loads() 將 JSON 對象轉換為 Python 字典

在此示例中,讓我們從 JSONPlaceholder 解碼來自 API 端點的 JSON 數據。在繼續此示例之前,應安裝 requests 模塊:

{
    "name": "Chinedu Obi",
    "age": 24,
    "country": "Nigeria",
    "languages": [
        "Igbo",
        "English",
        "Yoruba"
    ],
    "marital status": "single",
    "employee": true,
    "experience": [
        {
            "title": "Frontend Engineering Intern",
            "company": "Andela"
        },
        {
            "title": "Frontend Engineer",
            "company": "Paystack"
        }
    ]
}
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

以下是上面代碼的輸出:

import json

with open('employee.json', 'r', encoding='utf-8') as file_object:
    employee_dict = json.load(file_object)
    print(employee_dict)
登入後複製
登入後複製
登入後複製
登入後複製

在上面的 Python 代碼中,我們從返回 JSON 格式化字符串的端點獲取響應。我們將響應作為參數傳遞給 json.loads() 方法,將其解碼為 Python 字典。

結論

在現代 Web 開發中,JSON 是在服務器和 Web 應用程序之間交換數據的實際格式。如今,REST API 端點返回 JSON 格式的數據,因此了解如何使用 JSON 非常重要。

Python 具有 json 和 simplejson 等模塊,用於讀取、寫入和解析 JSON。 json 模塊隨 Python 標準庫一起提供,而 simplejson 是一個外部包,必須在使用前安裝。

在 Python 中構建 RESTful API 或在我們的項目中使用外部 API 時,我們經常需要將 Python 對象序列化為 JSON 並將其反序列化回 Python。本文中演示的方法被許多流行的項目使用。步驟通常相同。

(本教程的代碼可在 GitHub 上找到。)

關於 Python 中 JSON 的常見問題解答 (FAQ)

如何在 Python 中解析 JSON?

由於 json 模塊,在 Python 中解析 JSON 是一個簡單的過程。您可以使用 json.loads() 函數解析 JSON 字符串。這是一個例子:

<code>{'name': 'Chinedu Obi', 'age': 24, 'country': 'Nigeria', 'languages': ['Igbo', 'English', 'Yoruba'], 'marital status': 'single', 'employee': True, 'experience': [{'title': 'Frontend Engineering Intern', 'company': 'Andela'}, {'title': 'Frontend Engineer', 'company': 'Paystack'}]}</code>
登入後複製
登入後複製
登入後複製
登入後複製

在此代碼中,json.loads() 將 JSON 字符串轉換為 Python 字典,然後您可以像處理任何其他字典一樣與它交互。

如何將 Python 對象轉換為 JSON?

json 模塊提供 json.dumps() 函數,該函數可以將 Python 對象轉換為 JSON 字符串。這是一個例子:

import json

mother = {
    "name": "Asake Babatunde",
    "age": 28,
    "marital status": "Married",
    "children": ["Ayo", "Tolu", "Simi"],
    "staff": False,
    "next of kin": {"name": "Babatune Lanre", "relationship": "husband"},
}

with open("mother.json", "w", encoding="utf-8") as file_handle:
    json.dump(mother, file_handle, indent=4)
登入後複製
登入後複製
登入後複製
登入後複製

在此代碼中,json.dumps() 將 Python 字典轉換為 JSON 字符串。

如何在 Python 中從文件讀取 JSON?

您可以使用 json.load() 函數從文件讀取 JSON 數據。這是一個例子:

json.dump(obj, fp, indent)
登入後複製
登入後複製
登入後複製
登入後複製

在此代碼中,json.load() 讀取文件並將 JSON 數據轉換為 Python 對象。

如何在 Python 中將 JSON 寫入文件?

您可以使用 json.dump() 函數將 JSON 數據寫入文件。這是一個例子:

json.dumps(obj, indent)
登入後複製
登入後複製

在此代碼中,json.dump() 將 Python 對像作為 JSON 數據寫入文件。

如何在 Python 中漂亮打印 JSON?

json.dumps() 函數提供漂亮打印 JSON 的選項。這是一個例子:

import json

subject = {
    "name": "Biology",
    "teacher": {"name": "Nana Ama", "sex": "female"},
    "students_size": 24,
    "elective": True,
    "lesson days": ["Tuesday", "Friday"],
}
登入後複製
登入後複製

在此代碼中,indent 參數指定要使用多少個空格作為縮進,這使得輸出更易於閱讀。

如何處理 JSON 中的複雜 Python 對象?

json 模塊默認只能處理簡單的 Python 對象。對於像自定義類這樣的複雜對象,您需要提供一個函數來告訴它如何序列化對象。這是一個例子:

{
    "name": "Chinedu Obi",
    "age": 24,
    "country": "Nigeria",
    "languages": [
        "Igbo",
        "English",
        "Yoruba"
    ],
    "marital status": "single",
    "employee": true,
    "experience": [
        {
            "title": "Frontend Engineering Intern",
            "company": "Andela"
        },
        {
            "title": "Frontend Engineer",
            "company": "Paystack"
        }
    ]
}
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

在此代碼中,encode_person 函數用於將 Person 對象轉換為可序列化格式。

如何解析結構未知的 JSON?

如果您事先不知道 JSON 數據的結構,您仍然可以將其解析為 Python 對象並對其進行探索。這是一個例子:

import json

with open('employee.json', 'r', encoding='utf-8') as file_object:
    employee_dict = json.load(file_object)
    print(employee_dict)
登入後複製
登入後複製
登入後複製
登入後複製

在此代碼中,json.loads() 將 JSON 字符串轉換為 Python 字典,然後您可以對其進行迭代以探索其內容。

如何在 Python 中處理大型 JSON 文件?

對於大型 JSON 文件,您可以使用 ijson 包,該包允許您流式傳輸 JSON 數據,而不是一次將所有數據都加載到內存中。這是一個例子:

<code>{'name': 'Chinedu Obi', 'age': 24, 'country': 'Nigeria', 'languages': ['Igbo', 'English', 'Yoruba'], 'marital status': 'single', 'employee': True, 'experience': [{'title': 'Frontend Engineering Intern', 'company': 'Andela'}, {'title': 'Frontend Engineer', 'company': 'Paystack'}]}</code>
登入後複製
登入後複製
登入後複製
登入後複製

在此代碼中,ijson.items() 從 JSON 數據生成一個對象流,然後您可以對其進行迭代。

如何在 Python 中處理 JSON 錯誤?

當 json 模塊遇到無效的 JSON 時,它會引發 JSONDecodeError。您可以捕獲此錯誤並適當地處理它。這是一個例子:

import json

mother = {
    "name": "Asake Babatunde",
    "age": 28,
    "marital status": "Married",
    "children": ["Ayo", "Tolu", "Simi"],
    "staff": False,
    "next of kin": {"name": "Babatune Lanre", "relationship": "husband"},
}

with open("mother.json", "w", encoding="utf-8") as file_handle:
    json.dump(mother, file_handle, indent=4)
登入後複製
登入後複製
登入後複製
登入後複製

在此代碼中,try/except 塊捕獲 JSONDecodeError 並打印錯誤消息。

如何在 Python 中將 JSON 與 HTTP 請求一起使用?

requests 庫使使用 JSON 數據發送 HTTP 請求和處理 JSON 響應變得容易。這是一個例子:

json.dump(obj, fp, indent)
登入後複製
登入後複製
登入後複製
登入後複製

在此代碼中,requests.post() 使用 JSON 數據發送 POST 請求,response.json() 解析 JSON 響應。

以上是在Python中使用JSON文件,並提供示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板