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)
控制编码过程:indent
参数、sort_keys
参数等
4. JSON解码(反序列化)
使用json.loads()
进行JSON字符串的解码:
import json
json_str = '{"name": "Bob", "age": 25}'
data = json.loads(json_str)
print(data)
控制解码过程:object_hook
参数、parse_float
参数等
5. 文件操作
读取JSON数据文件:json.load()
with open('data.json', 'r') as file:
data = json.load(file)
写入JSON数据文件:json.dump()
data = {'name': 'Charlie', 'age': 35}
with open('output.json', 'w') as file:
json.dump(data, file)
6. 错误处理
处理JSON编解码过程中可能出现的异常:
try:
data = json.loads(invalid_json_str)
except json.JSONDecodeError as e:
print(f"JSON decoding error: {e}")
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)
这里,data
字典被编码为JSON格式并写入名为data.json
的文件中。
json.load()
函数用于从JSON文件中读取数据并解码为Python数据结构。
with open('data.json', 'r') as file:
data = json.load(file)
这里,名为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)
这里,data
字典被编码为JSON格式的字符串。
json.loads()
函数用于将JSON格式的字符串解码为Python数据结构。
json_str = '{"name": "Bob", "age": 25}'
data = json.loads(json_str)
print(data)
这里,名为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}")
解释代码:
- 读取JSON文件: 使用
json.load
函数加载JSON文件中的数据。 - 确定CSV的列名: 假设JSON数据是一个包含字典的列表,列名即字典的键。如果JSON数据为空,则列名也为空。
- 写入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"}
]
示例输出 (data.csv):
name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago