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数据处理的资料请关注代码网其它相关文章!
发表评论