一、什麼是JSON
JSON全稱是JavaScript Object Notation(JavaScript對象表示法),是一種輕量級的數據交換格式。
JSON使用非常簡潔的文本格式,表示數據為鍵值對的集合,常用於前後端數據交互,尤其是在Web環境中,JSON已經取代XML成為主流的數據交換格式之一。
二、Python中JSON的應用
Python中提供了json模塊,可以方便地將Python對象序列化成JSON字符串,或將JSON字符串轉化為Python對象。
三、Python實現JSON對象序列化為字符串的步驟
1. 將Python對象轉化為JSON字符串
在Python中,我們可以使用json.dumps()方法將Python對象轉化為JSON字符串,其基本語法如下:
import json data = {"name": "John", "age": 25} json_str = json.dumps(data) print(json_str)
其中,參數”data”為待序列化的Python對象,”json_str”為序列化後的JSON字符串。
2. 自定義JSON序列化對象
有時,Python對象並非所有字段都需要被序列化成JSON字符串。此時,我們可以自定義一個JSONEncoder子類,並override其default()方法。具體語法如下:
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} return json.JSONEncoder.default(self, obj) person = Person("John", 25) json_str = json.dumps(person, cls=PersonEncoder) print(json_str)
在上面的例子中,我們自定義了一個Person類,並在PersonEncoder中override default()方法,判斷如果傳入的對象是Person類型,則只序列化name字段,否則調用父類方法序列化其它字段。
3. 序列化datetime類型
在Python對象中,我們經常會使用datetime類型來表示日期時間。然而,在JSON中,日期時間通常使用字符串表示。為了將Python中的datetime類型轉化為JSON字符串,我們需要自定義一個JSONEncoder子類,並override其default()方法。具體語法如下:
import json from datetime import datetime class DatetimeEncoder(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) now = datetime.now() json_str = json.dumps(now, cls=DatetimeEncoder) print(json_str)
在上面的例子中,我們使用datetime.strftime()方法將datetime類型轉化為字符串,然後序列化成JSON字符串。
4. 序列化對象的嵌套
在Python中,我們可以使用dict和list等複合類型嵌套表示對象的結構。對於這樣的複合類型對象,我們可以使用json.dumps()方法將其轉化為JSON字符串。具體語法如下:
import json data = { "name": "John", "age": 25, "education": [ { "school": "Harvard", "major": "Computer Science" }, { "school": "MIT", "major": "Artificial Intelligence" } ] } json_str = json.dumps(data) print(json_str)
在上面的例子中,”data”對象包含了一個list類型的education字段,其中每個元素又是一個dict類型。
總結
Python中的json模塊提供了方便的API,可以快速地將Python對象序列化成JSON字符串,或將JSON字符串轉化為Python對象。同時,我們可以根據需要自定義JSONEncoder子類,實現特定的序列化邏輯。
原創文章,作者:TVOY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/141511.html