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