Python中利用json库进行JSON数据处理详解
作者:morris131
Python的json库用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python的json库提供了函数来编码(将Python对象转换为JSON字符串)和解码(将JSON 字符串转换为Python对象)JSON数据。
编码Python对象为JSON字符串
使用json.dumps()方法将Python对象编码为JSON字符串:
import json data = { "name": "Morris", "age": 18, "mail": "Morris@18.com" } # dict -> json str = json.dumps(data, indent=4) print(str) arr = [data, data] # list -> json arr_str = json.dumps(arr, indent=4) print(arr_str)
运行结果如下:
{
"name": "Morris",
"age": 18,
"mail": "Morris@18.com"
}
[
{
"name": "Morris",
"age": 18,
"mail": "Morris@18.com"
},
{
"name": "Morris",
"age": 18,
"mail": "Morris@18.com"
}
]
indent参数用于美化输出,使JSON字符串更具可读性。
解码JSON字符串为Python对象
使用json.loads()方法将JSON字符串解码为Python对象(通常是字典或列表):
import json object_str = """ { "name": "Morris", "age": 18, "mail": "Morris@18.com" } """ obj = json.loads(object_str) print(obj) array_str = """ [ { "name": "Morris", "age": 18, "mail": "Morris@18.com" }, { "name": "Morris", "age": 18, "mail": "Morris@18.com" } ] """ arr = json.loads(array_str) print(arr)
运行结果如下:
{'name': 'Morris', 'age': 18, 'mail': 'Morris@18.com'}
[{'name': 'Morris', 'age': 18, 'mail': 'Morris@18.com'}, {'name': 'Morris', 'age': 18, 'mail': 'Morris@18.com'}]
将Python对象写入JSON文件
json.dump()函数也是用于将Python对象编码成JSON格式,但它直接将编码后的数据写入到一个文件中,而不是返回字符串。
import json data = { "name": "Morris", "age": 18, "mail": "Morris@18.com" } # dict -> json file with open('data.json', 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=4)
从文件中读取JSON数据
使用json.load()方法从文件中读取JSON数据并将其解析为Python对象:
import json # json file -> dict with open('data.json', 'r', encoding='utf-8') as f: obj = json.load(f) print(obj)
运行结果如下:
{'name': 'Morris', 'age': 18, 'mail': 'Morris@18.com'}
处理复杂对象
有时你可能需要处理包含复杂对象(如自定义类实例)的JSON数据。你可以通过实现自定义的编码器和解码器来处理这些对象。
自定义编码器
要实现自定义编码器,你需要创建一个继承自json.JSONEncoder的类,并重写default方法:
import json from datetime import datetime class CustomEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.strftime("%Y-%m-%d %H:%M:%S") # 其他自定义处理 return json.JSONEncoder.default(self, obj) data = { "name": "Morris", "timestamp": datetime.now() } json_str = CustomEncoder().encode(data) print(json_str)
运行结果如下:
{"name": "Morris", "timestamp": "2024-12-31 14:16:55"}
自定义解码器
要实现自定义解码器,你需要创建一个继承自json.JSONDecoder的类,并重写object_hook或object_pairs_hook方法:
import json from datetime import datetime def datetime_parser(dct): for key, value in dct.items(): if isinstance(value, str): try: # 假设日期格式是 "YYYY-MM-DD" dct[key] = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") except ValueError: # 如果不是日期格式,则保持原样 pass return dct json_str = """ { "name": "Morris", "timestamp": "2024-12-31 14:16:55" } """ data = json.loads(json_str, object_hook=datetime_parser) print(data) print(data['timestamp'])
运行结果如下:
{'name': 'Morris', 'timestamp': datetime.datetime(2024, 12, 31, 14, 16, 55)}
2024-12-31 14:16:55
以上就是Python中利用json库进行JSON数据处理详解的详细内容,更多关于Python JSON数据处理的资料请关注脚本之家其它相关文章!