当前位置: 代码网 > it编程>前端脚本>Python > Python中利用json库进行JSON数据处理详解

Python中利用json库进行JSON数据处理详解

2025年02月28日 Python 我要评论
python的json库用于处理json(javascript object notation)数据格式。json是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。python的

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com