如何在 Python 中解析 JSON

想知道如何在Python中解析JSON?你並不孤單。本指南使讀取、編寫和解析一段代碼變得輕而易舉。

在本快速指南中,我們將介紹在 python 中解析的基礎知識,解釋什麼是 JSON,以及如何使用它們來獲取所需的數據。

什麼是解析?

解析是將字元序列轉換為抽象語法樹的過程。然後,解析器使用此樹對輸入執行各種操作,例如檢查語法正確性或確定輸入中是否存在任何錯誤。

在哈斯克爾中從頭開始解析 Json |Abhinavsarkar.net

最常見的解析器類型稱為詞法分析器,它將字元序列轉換為標記(或“詞素”)。令牌可以是對您的語言有意義的任何內容:它可以是標識碼、文字字串(如“hello”),甚至是更複雜的內容,如函數調用。 

將所有詞素轉換為標記后,您需要決定程序處理它們后應該如何處理它們。此決定取決於您的語言的工作方式。有些語言沒有函數的概念;其他人可能使用遞歸和高階函數;其他人可能使用閉包或匿名命名空間等。 

您還需要確保每個令牌不包含多個字元,以免在解析過程中意外創建無限迴圈。

什麼是 JSON?

JavaScript Object Notation is a lightweight data-interchange format that describes objects – via attribute/value pairs – for data storage or transport. For example, let’s say you have a glossary on your website. JSON uses a string to define it. “title” : “example glossary”

JSON 檔案的主要類型有哪些?

JSON 檔有兩種主要類型:對象和數位。 對象 是存儲任何類型的數據的簡單方法,而 Array 用於儲存包含其他物件的物件。 

使用 JSON 有什麼好處?

使用 JSON 而不是 XML 或其他格式(如 CSV 或 HTML)的主要好處是,您不必擔心應用程式中的任何特殊解析代碼。使用 JSON 時,必須在頁面上的正確位置包含包含數據的文件,然後從那裡讀取。這意味著無論某人使用哪種設備查看您的網站,他們總是得到您想要獲得的內容。  

什麼是 Python?

Python 是一種通用程式設計語言,可用於許多不同類型的專案。它易於學習,並擁有豐富的圖書館,可讓您的生活更輕鬆。  

Python周圍還有一個活躍的社區,這意味著有很多在線資源可以説明你入門。

什麼是字串? 

字串是字串序列。字元是符號,如字母或數位。所以,從技術上講, 這句話是一個字元串。 

但是計算機不會讀取字元或符號。他們只讀取 1 和 0,要麼;換句話說—— 二進位。 

即使您在電腦螢幕上看到字元 - 在幕後 - 計算機正在將字元轉換或編碼為1和0。這個過程的反面(二進位到字元)稱為解碼。 

簡而言之,Python 字串是將人類命令轉換為計算機理解的二進位語言的字元序列。 

什麼是 Python 中的模組? 

模組將大型程式分解為可管理的、有組織的小檔。在 Python 中,它們指的是包含 Python 語句和定義的檔。包含 Python 代碼(例如 example.py)的檔就是一個模組。它的模組名稱將是「示例」。 

如何在 Python 中解析 JSON。

您可以使用 Python 的 JSON 模組來處理 JSON(包含 JSON 物件的字串或檔案)。如果您在使用模組之前將其導入,這將有所説明。

導入 json

JSON 模組可以輕鬆解析包含 JSON 物件的 JSON 字串和檔。

有許多方法可以從使用 JSON 物件表示法(或任何其他形式)格式化的字串中解析相同的資訊。 

最簡單的方法是使用內置函數「json」。它接受一個名為「indent」的可選參數,該參數指定在分析輸入數據時使用的縮進量。 

如果為 None,則不會有縮進。否則,它將在每個新代碼行之前至少添加一個空格。 

此方法適用於只想從值清單中提取一個值或從字典結構中提取一個鍵/值對的簡單情況。 

但是,如果您需要從同一結構中提取多個值,或者想要將 JSON 字串解析到包含嵌套結構的 Python 字典中,該怎麼辦?在這種情況下,最好使用「json.loads」方法。

json.load 方法

import json
person = '{"name": "Steve", "languages": ["English", "French"]}'
person_dict = json.loads(person)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print( person_dict)
# Output: ['English', 'French']
print(person_dict['languages'])

在這裡,“person”是一個JSON字串,person_dict是一個字典。

這將返回輸入數據中的所有鍵和值作為字典。如果不存在鍵,則將為該鍵/值對返回 None。與每個鍵/值對關聯的值是通過查找其字典條目及其名稱來確定的。

Python 讀取 JSON 檔

您可以使用 json.load 方法讀取包含 JSON 物件的檔。

{"name": "Steve", 
"languages": ["English", "French"]
}

以下是解析此檔案的方法:

import json
with open('path_to_file/person.json', 'r') as f:
data = json.load(f)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print(data)

將 Python 轉換為 JSON 字串

您可以使用 json.dumps 方法將字典轉換為 JSON 字串。

import json
person_dict = {'name': 'Bob',
'age': 12,
'children': None
}
person_json = json.dumps(person_dict)
# Output: {"name": "Bob", "age": 12, "children": null}
print(person_json)

將 JSON 寫入檔 

要在 Python 中將 JSON 寫入文件,我們可以使用 json.dump() 方法。

import json
person_dict = {"name": "Steve",
"languages": ["English", "French"],
"married": False,
"age": 33
}
with open('person.txt', 'w') as json_file:
  json.dump(person_dict, json_file)

在上面的程式中,我們使用“w”在寫入模式下打開了一個名為 person.txt 的檔。 如果該檔尚不存在,它將創建一個。然後,json.dump 將person_dict轉換為保存在person.txt 檔中的 JSON 字串。

當您運行該程式時,它會創建人員.txt檔。該檔包含以下文字。

{"name": "Steve", "languages": ["English", "French"], "married": false, "age": 33} 

Python Pretty Print JSON

要分析和調試 JSON 數據,我們可能需要以更易讀的格式列印它。您可以通過將其他參數縮進和sort_keys傳遞給 json.dumps 和 json.dump 方法來執行此操作。

import json
person_string = '{"name": "Bob", "languages": "English", "numbers": [2, 1.6, null]}'
# Getting dictionary
person_dict = json.loads(person_string)
# Pretty Printing JSON string back
print(json.dumps(person_dict, indent = 4, sort_keys=True))

執行程式時,輸出將為:

{
    "languages": "English",
    "name": "Bob",
    "numbers": [
        2,
        1.6,
        null
    ]
}

在上面的程式中,我們使用了四個空格進行縮進,鍵按升序排序。

順便說一下,縮進的預設值為“無”,預設值為“sort_keys”。 

如果這看起來有點過分,我們有一個很棒且易於理解的 網頁抓取簡介。如果您正在尋找輪換住宅代理以確保順利的數據收集操作,請聯繫我們的團隊了解詳細資訊或探索我們的 包月套餐

常見問題

誰創建了 JSON?

Douglas Crockford在1999年創建了它,作為XML的替代品。

什麼是語法樹?

語法樹直觀地顯示語言結構。它將語言分解成句子的各個部分,通常忽略上下文。

如何在 Python 中讀取本地 JSON 檔?

首先,導入 json 模組,然後使用 open() 函數的 json 檔名打開檔。接下來,使用load() 讀取 json 檔並將 json 資料放入變數中。

In this Article:
Leave behind the complexities of web scraping.
Opt for IPBurger’s advanced web intelligence solutions to effortlessly collect real-time public data.
登記

更深入地瞭解

Proxies
AJ泰特
The Best Storm Proxies Alternative: Faster, Safer & More Affordable Proxies

Looking for a Storm Proxies Alternative? Storm Proxies sells the dream: simple, affordable proxies that “just work.” And for some users? It kind of delivers. Until it doesn’t. Because here’s the reality—if you’re pulling small data sets, running light scraping jobs, or dipping your toes into sneaker copping, Storm Proxies

Proxies
AJ泰特
The Best IPRoyal Alternative for Power, Control & Price

Outgrowing IPRoyal? Here’s the Smarter Alternative If you’ve been using IPRoyal, chances are it was for one simple reason—it’s cheap. And in the world of proxies, “cheap” can be enough to get you started. But here’s the thing about IPRoyal: it’s a gateway, not a long-term solution. At first, it

Scale Your Business
With The Most Advanced
Proxies On Earth
加入#1屢獲殊榮的代理網路