Python 中的 JSON 操作:简单、高效的数据交换格式

news2024/11/27 22:35:59

目录

1. JSON 数据格式

2. Python 操作 JSON 文件

2.1 JSON 反序列化为 Python 对象

2.2 Python 序列化为 JSON

3 工作中的常见场景

3.1 网络请求和响应

服务器端(Python):

客户端(JavaScript):

3.2 配置文件管理

读取配置文件:

修改配置文件:

​🎁更多干货

完整版文档下载方式:


在现代的数据交换和存储中,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 格式数据非常适合用于存储和管理配置文件,当然数据文件的使用之前勇哥有一篇文章详细介绍过,忘记了的小伙伴可以去复习一下,传送门:,下面举个荔枝:

读取配置文件:
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文件中的,本文就不做过多的描写了。


​🎁更多干货


完整版文档下载方式:

这些资料,对于从事【软件测试】等相关工作的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享。

在评论区和我互动交流或者私❤我【软件测试学习】领取即可,拿走不谢。


如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “👍点赞” “✍️评论” “💙收藏” 一键三连哦!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G三防平板电脑有哪些功能与特点

随着科技的不断进步&#xff0c;平板电脑已经成为许多人生活中必不可少的设备之一。而随着5G技术的全面普及&#xff0c;5G三防平板电脑也应运而生。这些平板电脑集成了内置高通八核处理器搭配Adreno GPU&#xff0c;搭载全新Android 11操作系统&#xff0c;以及提供多应用切换…

docker-compose实现微服务jar+mysql的容器服务发布(经典版)

一 安装mysql服务 1.1 拉取镜像 1.拉取&#xff1a; docker pull mysql:5.7.29 2.查看镜像&#xff1a; docker images 1.2 在宿主机创建文件存储mysql 1.创建映射目录&#xff1a;mysql-c5 在/root/export/dockertest 目录下&#xff0c;mkdir -p mysql-c5 &#…

Django proxy_view代理后端

某些需求下&#xff0c;需要通过Django代理后端&#xff0c;比如开发celery定时任务时候&#xff0c;需要代理后端的flower&#xff0c;代理后端可以直接使用Django自带的授权&#xff0c;方便权限控制 具体操作如下 1.安装 django-proxy 包&#xff0c;进行代理 pip install …

LVS负载均衡集群(DR)

目录 1.数据包流向 2.通信遇到的问题 1.ARP广播 导致所有节点服务器和调度器的VIP响应 2.VIP的调度器失效 3.案例 1. 配置负载调度器 2.部署共享存储 3. 配置节点服务器(这里是两台) 1.数据包流向 1.客户端发送请求到负载均衡器 请求的数据报文到达内核空间 2.负载均…

改进 Elastic Stack 中的信息检索:引入 Elastic Learned Sparse Encoder,我们的新检索模型

作者&#xff1a;Thomas Veasey&#xff0c;Quentin Herreros 在本博客中&#xff0c;我们讨论了我们一直在使用预先训练的语言模型增强 Elastic 开箱即用检索功能所做的工作。 在本系列的上一篇博客文章中&#xff0c;我们讨论了在零样本设置中应用密集模型进行检索的一些挑战…

全网最细,接口自动化测试hook机制使用详细,进阶高级...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 requests 库只支持…

Sa-Token,一款更加轻量的权限认证框架

今天给大家介绍一个轻量级 Java 权限认证框架&#xff0c;我们之前一直采用最多的鉴权框架是OAuth2.0或者SpringSecurity&#xff0c;但是两者的配置都相当复杂&#xff0c;学习成本也非常高&#xff0c;所以我一直在试图寻找更好的解决办法&#xff0c;这几天在搭建权限体系平…

密码学学习笔记(五):Hash Functions - 哈希函数1

简介 什么是密码学中的哈希函数&#xff1f; 哈希函数是一种快速算法&#xff0c;它接受任何长度的输入&#xff0c;并产生一个固定长度的随机输出&#xff0c;称为摘要(digest)&#xff0c;比如&#xff1a; MD4, MD5: 128-bit output (broken) •SHA-1: 160-bit output (b…

Infinite Zoom 丝滑循环小视频生成方法

使用Infinite Zoom插件在Stable Diffusion中可以制作无限缩放效果视频的过程。 文章目录 插件安装插件功能Main选项卡Video选项卡OutpaintPost process 插件使用 插件安装 在Stable-Diffusion-webui安装Infinite Zoom插件。启动Stable-Diffusion-webui&#xff0c;选择扩展-从…

使用css的:before属性在文字前加短竖线

有时候我们需要在文字或者标题前加个短竖线&#xff0c;有的人会使用 border 来模拟一个竖线&#xff0c;其实大可不必&#xff0c;我们可以利用元素的 :before 属性来实现&#xff0c;效果如下&#xff1a; 具体的代码如下&#xff0c; HTML&#xff1a; <span class&quo…

【计算机网络】第 1 课 - 数据的三种交换方式

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、电路交换 3、分组交换 4、三种交换方式的对比 4.1、电路交换优点 4.2、电路交换缺点 4.3、报文交换优点 4.4、…

【抽象拓扑排序】ABC216 D

D - Pair of Balls (atcoder.jp) 题意&#xff1a; 有2*n个球&#xff0c;每个球涂n种颜色&#xff0c;每种颜色恰好涂两个球&#xff0c;把这些球放进m个栈里&#xff0c;每次操作可以弹出两个相同颜色的球&#xff0c;问是否存在方案使得将所有栈清空 思路&#xff1a; 注…

Day44——动态规划part6

完全背包 private static void testCompletePack(){int[] weight {1, 3, 4};int[] value {15, 20, 30};int bagWeight 4;int[] dp new int[bagWeight 1];for (int i 0; i < weight.length; i){ // 遍历物品for (int j weight[i]; j < bagWeight; j){ // 遍历背包…

2023.07.06 homework

1&#xff09;止水夹打开&#xff0c;连通器相通 2&#xff09;左侧水位高11cm 的水位下降 y cm 3&#xff09;右侧水位低 4cm 的水位上涨 x cm 4&#xff09;最终两边水位相等保持一个平面上 11cm - y 4cm x 5&#xff09;左侧的水下降的体积跑哪里去了&#xff0c;填到…

flask和Vue3的前后端数据传输

&#xff08;一&#xff09;基于flask&#xff0c;构建一个后端 后端就采用flask的一般构建方法&#xff0c;然后用 flask-restful 构建一个接口&#xff0c;接口返回为json数据。 datas [{id: 1, name: xag, 年龄: 18}, {id: 2, name: xingag, age: 19}]class UserView(Res…

基于单片机的智能太阳能手机充电器的设计与实现

功能介绍 以STM32/51单片机作为主控系统&#xff1b;LCD1602液晶显示当前电压值&#xff1b;太阳能电池板采集当前光照转换为电能&#xff0c;然后TP4056锂电池充放电模块给锂电池进行充电&#xff0c;充完后自动断电&#xff0c;防过充&#xff1b;通过CE8301模块对锂电池电压…

3D空间的旋转的各种等价形式

旋转矩阵 欧拉轴和角度&#xff08;旋转矢量&#xff09; 欧拉旋转 四元数

如何部署LVS + keepalived 负载均衡高可用集群

目录 一、LVS架构 概念 L4和L7负载均衡的区别 keepalive故障自动切换 抢占与非抢占 二、keepalived管理LVS负载均衡器 LVS集中节点的健康检查 三、部署LVS keeplived 高可用集群 第一步 关闭防火墙和安全机制 第二步 安装工具 第三步 手动配置模块 第四步 编辑策略…

解决OpenJDK 64-Bit Server VM warning

解决OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 问题解决关闭Xshare关闭提示&#xff08;如果你使用的是IDEA的话&#xff09; 问题 在写spring boot项目调试的时候&#xff0c;发…

超級SEO助手,如何批量发布文章?

超級SEO助手,如何批量发布文章&#xff1f; 目前超级SEO助手产品已经正式上线&#xff0c;但是还是有很多同学不会自动化发布文章&#xff0c;所以今天我就详细讲解下整个流程。 在发布文章之前首先确认你已经接入了对应的接口渠道&#xff0c;比如Wordpress、DeDeCMS、Z-Blog、…