在現(xiàn)代的數(shù)據(jù)交換和存儲中,JSON(JavaScript Object Notation)作為一種輕量級的數(shù)據(jù)交換格式,備受青睞。它不僅易于閱讀和理解,還可以靈活地表達(dá)和存儲高維數(shù)據(jù)。本文將介紹如何在 Python 中操作 JSON 文件,實(shí)現(xiàn)數(shù)據(jù)的序列化和反序列化。
1. JSON 數(shù)據(jù)格式
JSON 格式采用鍵值對的方式表達(dá)信息。它的值可以是對象、數(shù)組、字符串、整數(shù)、浮點(diǎn)數(shù)、布爾型或空值。下面是一個(gè) JSON 數(shù)據(jù)的例子:
{
"name": "kira",
"age": 18,
"hobby": ["唱歌", "吹牛"],
"friends": [
{"name": "劉德華"},
{"name": "梁朝偉"}
]
}
在實(shí)際工作中,我們可以根據(jù)需要擴(kuò)展和定制這種數(shù)據(jù)格式,以適應(yīng)不同的場景和業(yè)務(wù)需求。
2. Python 操作 JSON 文件
Python 提供了內(nèi)置的 json
模塊,用于解析和操作 JSON 數(shù)據(jù)。
2.1 JSON 反序列化為 Python 對象
將 JSON 數(shù)據(jù)反序列化為 Python 對象是常見的操作,可以利用 json.loads()
方法實(shí)現(xiàn)。
import json
json_str = '{"name":"kira","age":18}'
print(json_str, type(json_str))
load_data = json.loads(json_str)
print(load_data, type(load_data))
運(yùn)行結(jié)果:
{"name":"kira","age":18} <class 'str'>
{'name': 'kira', 'age': 18} <class 'dict'>
此外,如果需要從 JSON 文件中加載數(shù)據(jù),可以使用 json.load()
方法。
import json
with open('kira.json', 'r', encoding='utf-8') as f:
load_data = json.load(f)
print(load_data, type(load_data))
運(yùn)行結(jié)果:
{'name': 'kira', 'age': 18, 'hobby': ['唱歌', '吹牛'], 'friends': [{'name': '劉德華'}, {'name': '梁朝偉'}]} <class 'dict'>
2.2 Python 序列化為 JSON
與反序列化相對應(yīng),Python 可以將對象序列化為 JSON 數(shù)據(jù)。json.dumps()
方法可以實(shí)現(xiàn)這一功能。
import json
data = {
"name": "kira",
"age": 18,
"hobby": ["唱歌", "吹牛"],
"friends": [
{"name": "劉德華"},
{"name": "梁朝偉"}
]
}
json_str = json.dumps(data)
print(json_str)
print(json.dumps(data, ensure_ascii=False))
print(json.dumps(data, ensure_ascii=False, indent=4))
print(json.dumps(data, ensure_ascii=False, indent=4, sort_keys=True))
運(yùn)行結(jié)果:
{"name": "kira", "age": 18, "hobby": ["\u5531\u6b4c", "\u5439\u725b"], "friends": [{"name": "\u5218\u5fb7\u534e"}, {"name": "\u6881\u671d\u4f1f"}]}
{"name": "kira", "age": 18, "hobby": ["唱歌", "吹牛"], "friends": [{"name": "劉德華"}, {"name": "梁朝偉"}]}
{
"name": "kira",
"age": 18,
"hobby": [
"唱歌",
"吹牛"
],
"friends": [
{
"name": "劉德華"
},
{
"name": "梁朝偉"
}
]
}
{
"age": 18,
"friends": [
{
"name": "劉德華"
},
{
"name": "梁朝偉"
}
],
"hobby": [
"唱歌",
"吹牛"
],
"name": "kira"
}
如果需要將 Python 對象序列化后寫入 JSON 文件,可以使用 json.dump()
方法。
import json
data = {
"name": "kira",
"age": 18,
"hobby": ["唱歌", "吹牛"],
"friends": [
{"name": "劉德華"},
{"name": "梁朝偉"}
]
}
with open('first.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
通過上述方法,我們可以輕松地在 Python 中進(jìn)行 JSON 數(shù)據(jù)的序列化和反序列化操作。無論是數(shù)據(jù)交換還是數(shù)據(jù)存儲,JSON 都是一種簡單而高效的選擇。在實(shí)際工作中,我們可以根據(jù)具體需求靈活運(yùn)用 JSON 的優(yōu)勢,提高工作效率。
3 工作中的常見場景
3.1 網(wǎng)絡(luò)請求和響應(yīng)
在web開發(fā)中,客戶端和服務(wù)器之間得數(shù)據(jù)傳輸通常使用JSON格式。客戶端可以將數(shù)據(jù)封裝成 JSON 字符串,通過網(wǎng)絡(luò)請求發(fā)送給服務(wù)器。服務(wù)器接收到 JSON 數(shù)據(jù)后,可以使用 Python 中的 JSON 模塊將其反序列化為 Python 對象進(jìn)行處理。處理完成后,服務(wù)器可以將結(jié)果序列化為 JSON 數(shù)據(jù),發(fā)送給客戶端作為響應(yīng)。例如:
服務(wù)器端(Python):
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/api/data', methods=['POST'])
def receive_data():
data = request.get_json()
# 對接收到的數(shù)據(jù)進(jìn)行處理
processed_data = process_data(data)
# 將處理后的數(shù)據(jù)作為 JSON 響應(yīng)返回給客戶端
return jsonify(processed_data)
def process_data(data):
# 在這里進(jìn)行數(shù)據(jù)處理的邏輯
# ...
return processed_data
if __name__ == '__main__':
app.run()
客戶端(JavaScript):
const data = {
name: '測試玩家勇哥',
age: 18,
hobby: ['唱歌', '吹牛'],
};
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then(response => response.json())
.then(responseData => {
// 處理從服務(wù)器返回的響應(yīng)數(shù)據(jù)
console.log(responseData);
});
上述就是客戶端語服務(wù)器端之間使用JSON數(shù)據(jù)傳輸交互的常見場景。
3.2 配置文件管理
JSON 格式數(shù)據(jù)非常適合用于存儲和管理配置文件,當(dāng)然數(shù)據(jù)文件的使用之前勇哥有一篇文章詳細(xì)介紹過,忘記了的小伙伴可以去復(fù)習(xí)一下,傳送門:,下面舉個(gè)荔枝:
讀取配置文件:
import json
def read_config_file(file_path):
with open(file_path, 'r') as f:
config_data = json.load(f)
return config_data
# 讀取配置文件
config = read_config_file('config.json')
# 獲取配置項(xiàng)的值
db_host = config['database']['host']
db_port = config['database']['port']
修改配置文件:
import json
def update_config_file(file_path, new_config):
with open(file_path, 'w') as f:
json.dump(new_config, f, indent=4)
# 讀取配置文件
config = read_config_file('config.json')
# 修改配置項(xiàng)的值
config['database']['port'] = 5432
# 更新配置文件
update_config_file('config.json', config)
數(shù)據(jù)持久化存儲也是可以寫道JSON文件中的,本文就不做過多的描寫了。
總結(jié)
以上就是勇哥今天為各位小伙伴準(zhǔn)備的內(nèi)容,如果你想了解更多關(guān)于Python自動化測試的知識和技巧,歡迎關(guān)注:
我的公眾號:測試玩家勇哥
博客(奈非天的主頁 - 博客園 (cnblogs.com))文章來源:http://www.zghlxwxcb.cn/news/detail-499680.html
我會不定期地分享更多的精彩內(nèi)容。感謝你的閱讀和支持!文章來源地址http://www.zghlxwxcb.cn/news/detail-499680.html
本文來自博客園,作者:奈非天,轉(zhuǎn)載請注明原文鏈接:https://www.cnblogs.com/Nephalem-262667641/p/17460169.html
在現(xiàn)代的數(shù)據(jù)交換和存儲中,JSON(JavaScript Object Notation)作為一種輕量級的數(shù)據(jù)交換格式,備受青睞。它不僅易于閱讀和理解,還可以靈活地表達(dá)和存儲高維數(shù)據(jù)。本文將介紹如何在 Python 中操作 JSON 文件,實(shí)現(xiàn)數(shù)據(jù)的序列化和反序列化。
1. JSON 數(shù)據(jù)格式
JSON 格式采用鍵值對的方式表達(dá)信息。它的值可以是對象、數(shù)組、字符串、整數(shù)、浮點(diǎn)數(shù)、布爾型或空值。下面是一個(gè) JSON 數(shù)據(jù)的例子:
{
"name": "kira",
"age": 18,
"hobby": ["唱歌", "吹牛"],
"friends": [
{"name": "劉德華"},
{"name": "梁朝偉"}
]
}
在實(shí)際工作中,我們可以根據(jù)需要擴(kuò)展和定制這種數(shù)據(jù)格式,以適應(yīng)不同的場景和業(yè)務(wù)需求。
2. Python 操作 JSON 文件
Python 提供了內(nèi)置的 json
模塊,用于解析和操作 JSON 數(shù)據(jù)。
2.1 JSON 反序列化為 Python 對象
將 JSON 數(shù)據(jù)反序列化為 Python 對象是常見的操作,可以利用 json.loads()
方法實(shí)現(xiàn)。
import json
json_str = '{"name":"kira","age":18}'
print(json_str, type(json_str))
load_data = json.loads(json_str)
print(load_data, type(load_data))
運(yùn)行結(jié)果:
{"name":"kira","age":18} <class 'str'>
{'name': 'kira', 'age': 18} <class 'dict'>
此外,如果需要從 JSON 文件中加載數(shù)據(jù),可以使用 json.load()
方法。
import json
with open('kira.json', 'r', encoding='utf-8') as f:
load_data = json.load(f)
print(load_data, type(load_data))
運(yùn)行結(jié)果:
{'name': 'kira', 'age': 18, 'hobby': ['唱歌', '吹牛'], 'friends': [{'name': '劉德華'}, {'name': '梁朝偉'}]} <class 'dict'>
2.2 Python 序列化為 JSON
與反序列化相對應(yīng),Python 可以將對象序列化為 JSON 數(shù)據(jù)。json.dumps()
方法可以實(shí)現(xiàn)這一功能。
import json
data = {
"name": "kira",
"age": 18,
"hobby": ["唱歌", "吹牛"],
"friends": [
{"name": "劉德華"},
{"name": "梁朝偉"}
]
}
json_str = json.dumps(data)
print(json_str)
print(json.dumps(data, ensure_ascii=False))
print(json.dumps(data, ensure_ascii=False, indent=4))
print(json.dumps(data, ensure_ascii=False, indent=4, sort_keys=True))
運(yùn)行結(jié)果:
{"name": "kira", "age": 18, "hobby": ["\u5531\u6b4c", "\u5439\u725b"], "friends": [{"name": "\u5218\u5fb7\u534e"}, {"name": "\u6881\u671d\u4f1f"}]}
{"name": "kira", "age": 18, "hobby": ["唱歌", "吹牛"], "friends": [{"name": "劉德華"}, {"name": "梁朝偉"}]}
{
"name": "kira",
"age": 18,
"hobby": [
"唱歌",
"吹牛"
],
"friends": [
{
"name": "劉德華"
},
{
"name": "梁朝偉"
}
]
}
{
"age": 18,
"friends": [
{
"name": "劉德華"
},
{
"name": "梁朝偉"
}
],
"hobby": [
"唱歌",
"吹牛"
],
"name": "kira"
}
如果需要將 Python 對象序列化后寫入 JSON 文件,可以使用 json.dump()
方法。
import json
data = {
"name": "kira",
"age": 18,
"hobby": ["唱歌", "吹牛"],
"friends": [
{"name": "劉德華"},
{"name": "梁朝偉"}
]
}
with open('first.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
通過上述方法,我們可以輕松地在 Python 中進(jìn)行 JSON 數(shù)據(jù)的序列化和反序列化操作。無論是數(shù)據(jù)交換還是數(shù)據(jù)存儲,JSON 都是一種簡單而高效的選擇。在實(shí)際工作中,我們可以根據(jù)具體需求靈活運(yùn)用 JSON 的優(yōu)勢,提高工作效率。
3 工作中的常見場景
3.1 網(wǎng)絡(luò)請求和響應(yīng)
在web開發(fā)中,客戶端和服務(wù)器之間得數(shù)據(jù)傳輸通常使用JSON格式。客戶端可以將數(shù)據(jù)封裝成 JSON 字符串,通過網(wǎng)絡(luò)請求發(fā)送給服務(wù)器。服務(wù)器接收到 JSON 數(shù)據(jù)后,可以使用 Python 中的 JSON 模塊將其反序列化為 Python 對象進(jìn)行處理。處理完成后,服務(wù)器可以將結(jié)果序列化為 JSON 數(shù)據(jù),發(fā)送給客戶端作為響應(yīng)。例如:
服務(wù)器端(Python):
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/api/data', methods=['POST'])
def receive_data():
data = request.get_json()
# 對接收到的數(shù)據(jù)進(jìn)行處理
processed_data = process_data(data)
# 將處理后的數(shù)據(jù)作為 JSON 響應(yīng)返回給客戶端
return jsonify(processed_data)
def process_data(data):
# 在這里進(jìn)行數(shù)據(jù)處理的邏輯
# ...
return processed_data
if __name__ == '__main__':
app.run()
客戶端(JavaScript):
const data = {
name: '測試玩家勇哥',
age: 18,
hobby: ['唱歌', '吹牛'],
};
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then(response => response.json())
.then(responseData => {
// 處理從服務(wù)器返回的響應(yīng)數(shù)據(jù)
console.log(responseData);
});
上述就是客戶端語服務(wù)器端之間使用JSON數(shù)據(jù)傳輸交互的常見場景。
3.2 配置文件管理
JSON 格式數(shù)據(jù)非常適合用于存儲和管理配置文件,當(dāng)然數(shù)據(jù)文件的使用之前勇哥有一篇文章詳細(xì)介紹過,忘記了的小伙伴可以去復(fù)習(xí)一下,傳送門:,下面舉個(gè)荔枝:
讀取配置文件:
import json
def read_config_file(file_path):
with open(file_path, 'r') as f:
config_data = json.load(f)
return config_data
# 讀取配置文件
config = read_config_file('config.json')
# 獲取配置項(xiàng)的值
db_host = config['database']['host']
db_port = config['database']['port']
修改配置文件:
import json
def update_config_file(file_path, new_config):
with open(file_path, 'w') as f:
json.dump(new_config, f, indent=4)
# 讀取配置文件
config = read_config_file('config.json')
# 修改配置項(xiàng)的值
config['database']['port'] = 5432
# 更新配置文件
update_config_file('config.json', config)
數(shù)據(jù)持久化存儲也是可以寫道JSON文件中的,本文就不做過多的描寫了。
總結(jié)
以上就是勇哥今天為各位小伙伴準(zhǔn)備的內(nèi)容,如果你想了解更多關(guān)于Python自動化測試的知識和技巧,歡迎關(guān)注:
我的公眾號:測試玩家勇哥
博客(奈非天的主頁 - 博客園 (cnblogs.com))
我會不定期地分享更多的精彩內(nèi)容。感謝你的閱讀和支持!
到了這里,關(guān)于Python 中的 JSON 操作:簡單、高效的數(shù)據(jù)交換格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!