一、什麼是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-tw/n/141511.html
微信掃一掃
支付寶掃一掃