在现代的数据交换和存储中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格局,备受喜爱。它不只易于阅览和了解,还能够灵活地表达和存储高维数据。本文将介绍如安在 Python 中操作 JSON 文件,完成数据的序列化和反序列化。
1. JSON 数据格局
JSON 格局选用键值对的方式表达信息。它的值能够是目标、数组、字符串、整数、浮点数、布尔型或空值。下面是一个 JSON 数据的比如:
{
"name": "kira",
"age": 18,
"hobby": ["歌唱", "吹嘘"],
"friends": [
{"name": "刘德华"},
{"name": "梁朝伟"}
]
}
在实践作业中,咱们能够依据需要扩展和定制这种数据格局,以适应不同的场景和事务需求。
2. Python 操作 JSON 文件
Python 供给了内置的json
模块,用于解析和操作 JSON 数据。
2.1 JSON 反序列化为 Python 目标
将 JSON 数据反序列化为 Python 目标是常见的操作,能够运用json.loads()
办法完成。
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))
运转成果:
{"name":"kira","age":18} <class 'str'>
{'name': 'kira', 'age': 18} <class 'dict'>
此外,假如需要从 JSON 文件中加载数据,能够运用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))
运转成果:
{'name': 'kira', 'age': 18, 'hobby': ['歌唱', '吹嘘'], 'friends': [{'name': '刘德华'}, {'name': '梁朝伟'}]} <class 'dict'>
2.2 Python 序列化为 JSON
与反序列化相对应,Python 能够将目标序列化为 JSON 数据。json.dumps()
办法能够完成这一功用。
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))
运转成果:
{"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 中进行 JSON 数据的序列化和反序列化操作。无论是数据交换仍是数据存储,JSON 都是一种简略而高效的挑选。在实践作业中,咱们能够依据具体需求灵活运用 JSON 的优势,提高作业效率。
3 作业中的常见场景
3.1 网络请求和呼应
在web开发中,客户端和服务器之间得数据传输一般运用JSON格局。客户端能够将数据封装成 JSON 字符串,通过网络请求发送给服务器。服务器接收到 JSON 数据后,能够运用 Python 中的 JSON 模块将其反序列化为 Python 目标进行处理。处理完成后,服务器能够将成果序列化为 JSON 数据,发送给客户端作为呼应。例如:
服务器端(Python):
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/api/data', methods=['POST'])
def receive_data():
data = request.get_json()
# 对接收到的数据进行处理
processed_data = process_data(data)
# 将处理后的数据作为 JSON 呼应返回给客户端
return jsonify(processed_data)
def process_data(data):
# 在这里进行数据处理的逻辑
# ...
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 => {
// 处理从服务器返回的呼应数据
console.log(responseData);
});
上述就是客户端语服务器端之间运用JSON数据传输交互的常见场景。
3.2 装备文件办理
JSON 格局数据十分适合用于存储和办理装备文件,当然数据文件的运用之前勇哥有一篇文章详细介绍过,忘记了的小伙伴能够去温习一下,传送门:python常用的装备文件详谈,下面举个荔枝:
读取装备文件:
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')
# 获取装备项的值
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')
# 修正装备项的值
config['database']['port'] = 5432
# 更新装备文件
update_config_file('config.json', config)
数据耐久化存储也是能够写道JSON文件中的,本文就不做过多的描写了。
总结
以上就是勇哥今日为各位小伙伴准备的内容,假如你想了解更多关于Python自动化测验的常识和技巧,欢迎重视我:大众号\博客\CSDN\B站:测验玩家勇哥
;我会不定期地共享更多的精彩内容。感谢你的阅览和支持!
题外话,勇哥打算把新建的技术交流群,打造成一个活泼的高质量技术群。作业中遇到的技术问题,都能够在里面咨询大家,还有作业内推的时机。有爱好的小伙伴,欢迎加我(记住备注是进群仍是报名学习)
勇哥,10年落魄测验老司机,技术栈偏python,目前在一家超大型房产公司担任自动化测验主管,日常作业比较繁杂,主要负责自动化测验,功能测验、软件质量办理及人员办理。作业之余专心于为粉丝进行简历修正、面试辅导、模仿面试、资料共享、一对一自动化测验教学辅导等副业发展。目前已服务十多位小伙伴,获得高薪offer。
重视大众号,测验干货及时送达
往期精选文章:
python-Threading多线程之线程锁 |
Pytest 快速入门 |
pytest 前后置操作详谈 |
接口自动化之测验数据动态生成并替换 |
requests模块该怎么封装? |
最通俗易懂python操作数据库 |
python正则一篇搞掂 |
接口自动化怎么封装mysql操作 |
功能测验之必备常识 |
功能剖析思路 |
Python + ChatGPT来完成一个智能对话的钉钉机器人 |
一文看懂python怎么执行cmd命令 |