【Python】JSON操作中的高效小窍门

在这里插入图片描述

JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在各种应用场景中扮演着重要角色。Python 中处理 JSON 数据非常便捷,主要通过内置的 json 模块来实现。
本文将详细介绍如何使用 Python 进行 JSON 数据的操作,包括基本的序列化与反序列化、美化输出、处理特殊字符、自定义排序、优化性能、处理复杂数据类型以及批量文件读写等内容。

1.快速入门:认识 JSON

  • JSON 是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集,但独立于语言和平台。Python 中处理 JSON 数据非常方便,主要通过 json 模块完成。
  • 示例代码:
import json
# 创建一个简单的字典
data = {"name": "Alice","age": 30,"is_student": False,"hobbies": ["reading", "traveling", "coding"]}
# 将 Python 对象转换为 JSON 字符串
json_string = json.dumps(data)
print(json_string)
# 将 JSON 字符串转换回 Python 对象
parsed_data = json.loads(json_string)
print(parsed_data)
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.
  • 输出:
{"name": "Alice", "age": 30, "is_student": false, "hobbies": ["reading", "traveling", "coding"]}
{'name': 'Alice', 'age': 30, 'is_student': False, 'hobbies': ['reading', 'traveling', 'coding']}
1.2.

2.美化输出:让 JSON 更好看

  • 直接打印出来的 JSON 字符串可能不够美观,尤其是在调试时。使用 json.dumps() 方法的 indent 参数可以生成易读的格式。
  • 示例代码:
pretty_json = json.dumps(data, indent=4)
print(pretty_json)
1.2.
  • 输出:
{"name": "Alice","age": 30,"is_student": false,"hobbies": ["reading","traveling","coding"]}
1.2.3.4.5.6.7.8.9.10.

3.处理特殊字符:避免编码问题

  • 在处理包含特殊字符或非 ASCII 字符的 JSON 数据时,可能会遇到编码问题。设置 ensure_ascii=False 可以让非 ASCII 字符正确显示。
  • 示例代码:
special_data = {"message": "你好,世界!","emoji": "😊"}
json_string = json.dumps(special_data, ensure_ascii=False)
print(json_string)
1.2.3.4.5.6.7.
  • 输出:
{"message": "你好,世界!", "emoji": "😊"}
1.

4.自定义排序:按照特定顺序排序键值

  • 默认情况下,json.dumps() 会按照字典的键值顺序输出 JSON。如果想自定义排序规则,可以通过传递 sort_keys=True 参数实现。
  • 示例代码:
sorted_json = json.dumps(data, indent=4, sort_keys=True)
print(sorted_json)
1.2.
  • 输出:
{"age": 30,"hobbies": ["reading","traveling","coding"],"is_student": false,"name": "Alice"}
1.2.3.4.5.6.7.8.9.10.

5.高效序列化:优化性能

  • 在处理大量数据时,序列化和反序列化的性能至关重要。json 模块提供了 ensure_ascii 和 separators 等参数来优化性能。
  • 示例代码:
# 使用 separators 参数去除多余的空格
optimized_json = json.dumps(data, separators=(',', ':'))
print(optimized_json)
1.2.3.
  • 输出:
{"name":"Alice","age":30,"is_student":false,"hobbies":["reading","traveling","coding"]}
1.

6.自定义序列化:处理复杂数据类型

  • Python 中的某些数据类型(如 datetime 对象)默认无法被 json.dumps() 序列化。这时可以自定义序列化函数来处理这些复杂数据类型。
  • 示例代码:
from datetime 
import datetime
# 定义一个自定义的序列化函数
def custom_serializer(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError("Type not serializable")
# 创建一个包含 datetime 对象的字典
complex_data = {"name": "Alice","birthdate": datetime(1990, 1, 1),
"is_student": False,"hobbies": ["reading", "traveling", "coding"]}
# 使用自定义序列化函数
json_string = json.dumps(complex_data, default=custom_serializer)
print(json_string)
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.
  • 输出:
{"name": "Alice", "birthdate": "1990-01-01T00:00:00", "is_student": false, 
"hobbies": ["reading", "traveling", "coding"]}
1.

7.批量处理:优化文件读写

  • 在处理大型 JSON 文件时,逐行读取和写入可以显著提高效率。json 模块提供了 load() 和 dump() 方法来处理文件。
  • 示例代码:
# 写入 JSON 文件
with open('data.json', 'w') as file:
json.dump(data, file, indent=4)
# 读取 JSON 文件
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
1.2.3.4.5.6.7.8.
  • 输出:
{'name': 'Alice', 'age': 30, 'is_student': False, 'hobbies': ['reading', 'traveling', 'coding']}
1.

实战案例:处理天气 API 数据

  • 假设我们需要从一个天气 API 获取当前天气信息,并将其保存到本地文件中
  • 示例代码:
import requests
import json  # API 请求 URL
url = "https://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=YOUR_API_KEY"
# 发送 GET 请求
response = requests.get(url)     # 检查响应状态码
if response.status_code == 200:  # 解析 JSON 数据
weather_data = response.json()   # 将数据保存到文件
with open('weather.json', 'w') as file:
json.dump(weather_data, file, indent=4)
else:
print("Error:", response.status_code)
# 读取并打印数据
with open('weather.json', 'r') as file:
loaded_weather_data = json.load(file)
print(loaded_weather_data)
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.
  • 输出:
{"coord": {"lon": 116.4074,"lat": 39.9042},
"weather": [{"id": 802,"main": "Clouds","description": "scattered clouds","icon": "03n"}],
...}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.

  • 在这个案例中,我们首先发送了一个 GET 请求来获取北京的天气数据。然后将返回的 JSON 数据保存到本地文件 weather.json 中,并通过 json.load() 方法读取文件内容。这样不仅可以方便地查看数据,还可以用于后续的数据处理和分析
  • 本文介绍了 Python 中处理 JSON 数据的各种技巧,包括快速入门、美化输出、处理特殊字符、自定义排序、性能优化、处理复杂数据类型及批量文件读写等。通过这些技巧,可以更加高效地管理和操作 JSON 数据。
    图片

总结

  • 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利

  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!

  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,学习不再是只会理论
  • ④ 华为出品独家Python漫画教程,手机也能学习

可以扫描下方二维码领取【保证100%免费

在这里插入图片描述

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

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

相关文章

AI与物理学的交汇:Hinton与Hopfield获诺贝尔物理学奖

诺贝尔物理学奖颁给了AI!机器学习先驱Hinton与Hopfield联手获奖,出乎所有人的意料。 今年的诺贝尔物理学奖颁给了机器学习领域的两位先驱,杰弗里辛顿(Geoffrey Hinton)和约翰霍普菲尔德(John Hopfield&…

CSS计数器

CSS 中的计数器类似于变量,可以实现简单的计数功能,并将结果显示在页面上,在早期的网站上应用比较广泛。要实现计数器需要用到以下几个属性: counter-reset:创建或者重置计数器;counter-increment&#xf…

【软件部署安装】OpenOffice转换PDF字体乱码

现象与原因分析 执行fc-list查看系统字体 经分析发现,linux默认不带中文字体,因此打开我们本地的windows系统的TTF、TTC字体安装到centos机器上。 安装字体 将Windows的路径: C:\Windows\Fonts 的中文字体,如扩展名为 TTC 与TT…

力扣题31~40

题31(中等): 分析: 其实这题题目比较难懂,题目还是挺简单的 我们可以从后面末尾开始,如果前一个大于后面的,说明后面不用动,如果小于,那就找仅仅大于它的数字放前面&…

Chromium 关闭 Google Chrome 后继续运行后台应用功能分析c++

此功能允许关闭 Google Chrome 后继续运行后台,控制此功能的开关是 // Set to true if background mode is enabled on this browser. //更改此值可以修改默认开启关闭 inline constexpr char kBackgroundModeEnabled[] "background_mode.enabled"; …

案例分享—国外优秀UI设计作品赏析

深色UI界面的优点众多,首先体现在视觉舒适度上。深色背景能减少屏幕高亮面积,降低眼部压力,尤其在夜间或光线不足的环境下,深色模式能显著缓解眼睛疲劳,提供更舒适的使用体验。 深色UI界面在设计上更具高端感和优雅氛围…

用Raspberry Pi Imager重装树莓派系统

今天删东西的时候,无意中把系统文件给remove了,结果树莓派无法正常启动,只能重新安装。 用DiskGenius工具将SD卡彻底清空,并将boot分区和文件分区合并为一,之后再对这个新分区进行了格式化。接下来就是烧录镜像了。以…

自动化测试 | 窗口截图

driver.get_screenshot_as_file 是 Selenium WebDriver 的一个方法,它允许你将当前浏览器窗口(或标签页)的截图保存为文件。这个方法对于自动化测试中的截图验证非常有用,因为它可以帮助你捕获测试执行过程中的页面状态。 以下是…

布隆过滤器(Bloom Filter)详解

一、引言 在处理大量数据的场景中,我们经常会遇到判断一个元素是否在某个集合中的问题。传统的方法可能是使用 HashMap 等集合将数据保存起来,然后进行比较确定,但在元素很多的情况下,这种方式会非常浪费空间,检索速度…

Map的实现类:TreeMap

1.存储结构:红黑树 2.实现了SortedMap接口(是Map的子接口),可以对key自动排序。 3.实例代码:Student类和Demo03 如果出现类转换异常 参考【TreeSet(红黑树)】 package com.map;import java…

使用Git生成SSH密钥教程(附Git常用命令)

一、为什么使用SSH? 使用 Git 的 SSH(安全外壳协议)主要有以下几个原因:1. 安全性:SSH 是一种加密的网络协议,用于在网络中安全地运行网络服务。使用 SSH,所有传输的数据都会被加密&#xff0c…

Lory: 推进大型语言模型训练的新篇章

人工智能咨询培训老师叶梓 转载标明出处 随着模型规模的增长,如何有效训练并利用这些模型成为了一个挑战。陈丹琦团队一项新的研究提出了一种创新的预训练方法——Lory,旨在解决大模型在混合专家(MoE)架构中的可微分性和计算效率…

主机加固的关键要素:服务器防病毒

在数字化浪潮中,网络安全已成为企业不可忽视的一环。尤其是安全运维人员,他们肩负着保护企业数据不受侵害的重任。MCK主机加固解决方案,正是为了应对这一挑战而生。 网络安全的严峻现实 不久前,一家知名企业因勒索病毒攻击而被迫…

2024 kali虚拟机安装教程,分两大步骤,图文讲解(1)

第二步链接: 2024 kali虚拟机安装教程,分两大步骤,图文讲解(2)-CSDN博客 准备工作 1.kali的iso镜像文件 2.VMware Workstation Pro 虚拟机软件 正式开始 1.创建新的虚拟机,勾选自定义(高级…

ssm基于SSM框架的餐馆点餐系统的设计+VUE

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 摘要 I Abstract II 1绪论 1 1.1研究背景与意义 1 1.1.1研究背景 1 1.1.2研究意义 1 1.2国内外研究…

【AGC005D】~K Perm Counting(计数抽象成图)

容斥原理。 求出f(m) ,f(m)指代至少有m个位置不合法的方案数。 怎么求? 注意到位置为id,权值为v ,不合法的情况,当且仅当 v idk或 v id-k 因此,我们把每一个位置和权值抽象成点 ,不合法的情况之间连一…

Docker容器简介及部署方法

1.1 Docker简介 Docker之父Solomon Hykes:Docker就好比传统的货运集装箱 2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差 docker2013年首次发布,由Docker, Inc开发 1.1.1什么是Docker Docker是管理容器的引…

数据结构-LRU缓存(C语言实现)

遇到困难,不必慌张,正是成长的时候,耐心一点! 目录 前言一、题目介绍二、实现过程2.1 实现原理2.2 实现思路2.2.1 双向链表2.2.2 散列表 2.3 代码实现2.3.1 结构定义2.3.2 双向链表操作实现2.3.3 实现散列表的操作2.3.4 内存释放代…

Java后端面试----某团一面

美团一面 1.介绍一下你的第一个项目 这个就不多说了,主要是根据自己的简历上面的项目进行一个简短的概括使用的技术栈和什么背景解决了什么问题等等。 2.线程安全的类有哪些,平时有使用过哪些,主要解决什么问题 在Java中线程安全的类比如…

vue使用table实现动态数据报表(行合并)

<template><div class"previewTable"><h2>***项目研发数据报告</h2><table id"previewTable" width"100%"><tr><th>项目名称</th><td colspan"6">{{ resultData.proName }}<…