Python教程:一文了解Python中的json库

简介: JSON(JavaScript Object Notation)是一种轻量级数据交换格式,易于人类阅读和编写,也易于计算机解析和生成。在Python中,JSON通常用于数据交换和存储,因为它与Python的字典和列表类型相似。

 1. JSON简介


  • JSON(JavaScript Object Notation)是一种轻量级数据交换格式,易于人类阅读和编写,也易于计算机解析和生成。
  • 在Python中,JSON通常用于数据交换和存储,因为它与Python的字典和列表类型相似。

2. Python中的json库


  • json库提供了在Python中解析和生成JSON数据的功能。
  • 导入json库:import json

3. JSON编码(序列化)


使用json.dumps()进行JSON对象的编码:

import json
data = {'name': 'Alice', 'age': 30}
json_str = json.dumps(data)
print(json_str)

image.gif

控制编码过程:indent参数、sort_keys参数等

4. JSON解码(反序列化)


使用json.loads()进行JSON字符串的解码:

import json
json_str = '{"name": "Bob", "age": 25}'
data = json.loads(json_str)
print(data)

image.gif

控制解码过程:object_hook参数、parse_float参数等

5. 文件操作


读取JSON数据文件:json.load()

with open('data.json', 'r') as file:
    data = json.load(file)

image.gif

写入JSON数据文件:json.dump()

data = {'name': 'Charlie', 'age': 35}
with open('output.json', 'w') as file:
    json.dump(data, file)

image.gif

6. 错误处理


处理JSON编解码过程中可能出现的异常:

try:
    data = json.loads(invalid_json_str)
except json.JSONDecodeError as e:
    print(f"JSON decoding error: {e}")

image.gif

7. json.dump()、json.load()、json.dumps()、json.loads()的关系和区别


  • json.dump() 和 json.load()

json.dump()函数用于将Python数据结构编码为JSON格式并写入文件中。

import json
data = {'name': 'Alice', 'age': 30}
with open('data.json', 'w') as file:
    json.dump(data, file)

image.gif

这里,data字典被编码为JSON格式并写入名为data.json的文件中。

json.load()函数用于从JSON文件中读取数据并解码为Python数据结构。

with open('data.json', 'r') as file:
    data = json.load(file)

image.gif

这里,名为data.json的文件被读取并解码为Python数据结构,并赋值给变量data

  • json.dumps() 和 json.loads()

json.dumps()函数用于将Python数据结构编码为JSON格式的字符串。

import json
data = {'name': 'Alice', 'age': 30}
json_str = json.dumps(data)
print(json_str)

image.gif

这里,data字典被编码为JSON格式的字符串。

json.loads()函数用于将JSON格式的字符串解码为Python数据结构。

json_str = '{"name": "Bob", "age": 25}'
data = json.loads(json_str)
print(data)

image.gif

这里,名为json_str的JSON格式字符串被解码为Python数据结构,并赋值给变量data

  • json.dump()json.load() 主要用于与文件进行交互,可用于读写JSON文件。
  • json.dumps()json.loads() 主要用于在内存中处理JSON数据,可用于编码和解码JSON格式的字符串。

总的来说,json.dump()json.load() 是与文件交互的函数,而 json.dumps()json.loads() 则是在内存中进行编码和解码的函数。它们共同构成了Python中处理JSON数据的基本工具集。

8、实现JSON文件转成CSV文件


import json
import csv
# 假设你的JSON数据存储在一个文件中,例如data.json
json_file_path = 'data.json'
csv_file_path = 'data.csv'
# 读取JSON数据
with open(json_file_path, 'r', encoding='utf-8') as json_file:
    data = json.load(json_file)
# 确定CSV文件的列名(假设JSON数据是一个包含字典的列表)
if len(data) > 0:
    fieldnames = data[0].keys()
else:
    fieldnames = []
# 写入CSV文件
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    
    # 写入表头
    writer.writeheader()
    
    # 写入数据行
    for row in data:
        writer.writerow(row)
print(f"JSON数据已成功转换为CSV并保存到 {csv_file_path}")

image.gif

解释代码:

  1. 读取JSON文件: 使用json.load函数加载JSON文件中的数据。
  2. 确定CSV的列名: 假设JSON数据是一个包含字典的列表,列名即字典的键。如果JSON数据为空,则列名也为空。
  3. 写入CSV文件: 使用csv.DictWriter类创建一个CSV写入器,并使用writeheader方法写入表头,然后遍历JSON数据并逐行写入CSV文件。

注意事项:

  • JSON文件中每个对象(字典)的键必须一致,否则在写入CSV时可能会出现错误。
  • 这个示例假设JSON数据是一个包含字典的列表。如果你的JSON数据结构不同,需要相应地调整代码。

示例输入 (data.json):

[
    {"name": "Alice", "age": 30, "city": "New York"},
    {"name": "Bob", "age": 25, "city": "Los Angeles"},
    {"name": "Charlie", "age": 35, "city": "Chicago"}
]

image.gif

示例输出 (data.csv):

name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago

image.gif


目录
相关文章
|
2天前
|
数据采集 数据库 Python
Python并发编程新篇章:asyncio库使用全攻略,轻松驾驭异步世界!
【7月更文挑战第11天】Python的asyncio开启异步编程时代,通过案例展示如何用它和aiohttp构建并发爬虫。安装aiohttp后,定义异步函数`fetch`进行HTTP请求,返回状态码和内容长度。在`main`中,并发执行多个`fetch`任务,利用`asyncio.gather`收集结果。使用`async with`管理HTTP会话资源,确保释放。通过这种方式,爬虫性能大幅提升,适用于高并发场景。学习asyncio是提升并发性能的关键。
26 14
|
2天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
【7月更文挑战第11天】Python的asyncio库简化了单线程并发编程,利用协程和事件循环实现异步操作。async def定义异步函数,await挂起协程等待IO完成。例如,fetch_data模拟网络请求,main函数并发执行多个任务。asyncio.gather收集结果,Semaphore限制并发数,保证资源管理。asyncio提供高效优雅的并发解决方案。
18 4
|
2天前
|
API 开发者 Python
从理论到实践,Python asyncio库让你成为异步编程的王者!
【7月更文挑战第11天】Python的asyncio库助力异步编程,通过事件循环实现非阻塞并发。定义async函数,如`fetch_url`,用await处理异步操作。在main函数中,利用`asyncio.gather`并发执行任务。进阶应用涉及并发控制(如`asyncio.Semaphore`)和异常处理,使asyncio成为高并发场景下的得力工具。开始探索,掌握asyncio,成为异步编程专家!
11 3
|
2天前
|
调度 开发者 C++
异步风暴来袭!Python asyncio库详解,让你的应用性能飙升!
【7月更文挑战第11天】在高并发时代,Python的asyncio库带来了革命性的异步编程,缓解了GIL和同步IO的性能瓶颈。asyncio基于事件循环和协程实现非阻塞IO,提高资源利用率。对比同步HTTP请求(使用requests)与异步请求(aiohttp+asyncio),后者通过并发减少总耗时,提升了效率。尽管异步编程增加了复杂性,但其优势在于更高的吞吐量和更低延迟。掌握asyncio是现代Python开发的关键,助力构建高性能应用。
|
1天前
|
Python
告别阻塞,拥抱未来!Python 异步编程 asyncio 库实战指南!
【7月更文挑战第12天】Python的`asyncio`库是异步编程的关键,它允许程序在等待IO操作时执行其他任务,提升效率。异步函数用`async def`定义,`await`用于挂起执行。
13 1
|
1天前
|
Python
深度剖析 Python asyncio 库:解锁异步编程的无限可能!
【7月更文挑战第12天】Python的`asyncio`库揭示了异步编程的力量,它基于事件循环运行协程以实现高效并发。通过定义`async`函数,如`async_task`,并使用`asyncio.run`执行,我们可以处理单个任务。`asyncio.gather`则用于并发执行多个任务,例如在下载文件的场景中。异常处理可通过`try/except`嵌入到异步函数中。掌握这些,能提升I/O密集型任务的性能,开启异步编程新境界。
11 1
|
3天前
|
数据采集 数据库连接 调度
从菜鸟到大师:掌握Python asyncio库,并发编程不再是梦!
【7月更文挑战第10天】Python的asyncio库简化了异步编程,通过事件循环和协程实现非阻塞I/O,提升效率。从`async def`定义异步函数到`await`等待操作,如在`main`函数中并发调用`say_hello`。深入学习涉及自定义协程、异步上下文管理器和信号量。结合如aiohttp,能构建高性能并发应用,实现高效的Web服务。开始你的asyncio之旅,成为并发编程专家!**
11 0
|
24天前
|
开发工具 git Python
安装和使用`libnum`是一个用于数字理论函数的Python库
【6月更文挑战第19天】`libnum`是Python的数字理论函数库。安装可通过`git clone`,进入目录后运行`python setup.py install`,也可用`pip install libnum`。示例:使用`int_to_hex`将十进制数42转换为十六进制字符串'2a'。注意,信息可能已过时,应查最新文档以确保准确性。如遇问题,参考GitHub仓库或寻求社区帮助。
24 1
|
Linux Python
不可出外网的主机如何快速、方便、优雅的安装Python库?
不可出外网的主机如何快速、方便、优雅的安装Python库?
478 0
不可出外网的主机如何快速、方便、优雅的安装Python库?
|
Linux 计算机视觉 Python
Windows下使用Pycharm安装python GUI库Kivy教程
Windows下使用Pycharm安装python GUI库Kivy教程
652 0
Windows下使用Pycharm安装python GUI库Kivy教程