JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,它已成為各類應用程序之間數據傳輸的標準格式之一。Python提供了內置的JSON模塊,使得將Python數據結構轉換為JSON格式變得簡單易行。本文將從多個方面講解Python如何將數據轉換為JSON格式。
一、使用json.dumps()將Python數據轉換為JSON格式
Python內置的JSON模塊提供了dumps()函數,可以將Python數據轉換為一個JSON字元串。dumps()函數接受一個Python對象作為參數,返回一個序列化後的JSON格式的字元串。下面是dumps()函數的示例代碼:
<code import json data = {'name': 'John', 'age': 30, 'city': 'New York'} json_string = json.dumps(data) print(json_string)
上述代碼中,我們創建了一個Python字典,然後使用dumps()函數將其轉換為JSON字元串,並最終將其輸出到控制台上。輸出結果如下所示:
{“name”: “John”, “age”: 30, “city”: “New York”}
二、使用json.dump()將Python數據轉換為JSON格式並寫入文件
如果你想要將JSON格式的數據存儲到文件中,可以使用json.dump()函數。這個函數的用法和dumps()極其相似,只不過它額外接受一個文件對象作為參數,將序列化後的JSON格式數據寫入到文件中。下面是json.dump()函數的示例代碼:
<code import json data = {'name': 'John', 'age': 30, 'city': 'New York'} with open('data.json', 'w') as file: json.dump(data, file)
上述代碼中,我們將Python字典轉換為JSON格式,並將其寫入到名為data.json的文件中。注意,打開文件的模式必須是寫模式(’w’)。執行上述代碼後,你會在當前工作目錄下看到data.json文件,並且其內容應該如下所示:
{“name”: “John”, “age”: 30, “city”: “New York”}
三、使用自定義編碼器將Python數據轉換為JSON格式
如果你想要將Python對象轉換為JSON格式,但是默認的序列化方式無法滿足你的需求,那麼你可以使用自定義編碼器。自定義編碼器是一個Python類,它繼承自json.JSONEncoder類,並且覆蓋default()方法,該方法將Python對象轉換為一個JSON兼容的對象。下面是自定義編碼器的示例代碼:
<code import json class Person: def __init__(self, name, age): self.name = name self.age = age class PersonEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, Person): return {"name": obj.name, "age": obj.age} return super().default(obj) person = Person("John", 30) json_string = json.dumps(person, cls=PersonEncoder) print(json_string)
上述代碼中,我們使用自定義編碼器將Person對象轉換為JSON格式。注意,在dumps()函數中,我們傳遞了一個cls參數,這個參數是一個可選的編碼器類,用於將Python對象轉換為JSON格式。執行上述代碼後,輸出結果應該如下所示:
{“name”: “John”, “age”: 30}
四、使用json.loads()將JSON格式數據轉換為Python對象
除了將Python數據結構轉換為JSON格式之外,Python內置的JSON模塊還提供了loads()函數,可以將JSON格式的數據轉換為Python對象。loads()函數接受一個JSON字元串作為輸入,返回一個Python對象。下面是loads()函數的示例代碼:
<code import json json_string = '{"name": "John", "age": 30, "city": "New York"}' data = json.loads(json_string) print(data)
上述代碼中,我們將一個JSON字元串轉換為了Python對象,並將其輸出到控制台上。輸出結果應該如下所示:
{‘name’: ‘John’, ‘age’: 30, ‘city’: ‘New York’}
五、使用json.load()將JSON格式數據從文件中讀取並轉換為Python對象
類似於json.dump()函數,Python內置的JSON模塊還提供了load()函數,可以從JSON格式的文件中讀取數據,並將其轉換為Python對象。load()函數的用法和load()函數非常相似,只不過它額外接受一個文件對象作為參數,從文件中讀取JSON格式數據。下面是load()函數的示例代碼:
<code import json with open('data.json', 'r') as file: data = json.load(file) print(data)
上述代碼中,我們從data.json文件中讀取JSON格式的數據,並將其轉換為Python對象,並將其輸出到控制台上。輸出結果應該和上面的示例代碼輸出結果相同:
{‘name’: ‘John’, ‘age’: 30, ‘city’: ‘New York’}
六、使用ensure_ascii參數控制非ASCII字元的編碼方式
默認情況下,Python將所有非ASCII字元作為Unicode編碼進行處理,然後將其序列化為JSON格式的字元串。如果你想要直接將非ASCII字元保留在JSON字元串中,你可以使用ensure_ascii參數,將其設置為False。下面是ensure_ascii參數的示例代碼:
<code import json data = {'name': '約翰', 'age': 30, 'city': '紐約'} json_string = json.dumps(data, ensure_ascii=False) print(json_string)
上述代碼中,我們將Python字典中的name鍵的值設定為了「約翰」,它包含了一個中文字元。如果我們在不使用ensure_ascii參數的情況下,將其轉換為JSON字元串,那麼中文字元將被編碼為Unicode編碼。使用ensure_ascii=False參數可以避免出現這種情況,直接將中文字元保留在JSON字元串中。執行上述代碼後,輸出結果如下所示:
{“name”: “約翰”, “age”: 30, “city”: “紐約”}
七、使用indent參數控制JSON字元串的縮進
生成的JSON字元串通常都是一行,在調試和查看時,很難直觀地觀察其結構。如果你想要使JSON字元串更加易於閱讀,可以使用indent參數設置縮進字元數。下面是indent參數的示例代碼:
<code import json data = {'name': 'John', 'age': 30, 'city': 'New York'} json_string = json.dumps(data, indent=4) print(json_string)
上述代碼中,我們將indent參數設置為4,表示縮進四個空格。執行上述代碼後,生成的JSON字元串將會換行並縮進,其輸出結果如下所示:
{
“name”: “John”,
“age”: 30,
“city”: “New York”
}
八、使用sort_keys參數控制字典輸出順序
Python字典是無序的,這意味著當你將一個Python字典轉換為JSON字元串時,其輸出順序可能會發生變化。如果你想要控制輸出順序,可以使用sort_keys參數,將其設置為True,此時JSON中的鍵將被排序。下面是sort_keys參數的示例代碼:
<code import json data = {'name': 'John', 'age': 30, 'city': 'New York'} json_string = json.dumps(data, sort_keys=True) print(json_string)
上述代碼中,我們將sort_keys參數設置為True,表示鍵將按照字母順序排序。執行上述代碼後,輸出結果應該如下所示:
{“age”: 30, “city”: “New York”, “name”: “John”}
總結:
Python內置的JSON模塊提供了簡單易用的方式,用於將Python數據結構轉換為JSON格式。本文從多個方面對Python如何將數據轉換為JSON格式進行了詳細的闡述,包括使用dumps()、dump()函數將Python數據轉換為JSON格式,並寫入到文件中,使用自定義編碼器控制數據轉換,以及使用loads()、load()函數將JSON格式數據轉換為Python對象。此外,還介紹了如何使用ensure_ascii參數避免Unicode編碼問題,使用indent參數控制JSON字元串的縮進,以及使用sort_keys參數控制輸出順序。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/156452.html