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

 更新时间:2025年02月28日 10:04:46   作者:morris131  
JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,下面就跟随小编一起来了解下如何使用Python实现JSON数据处理吧

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数据处理的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Python实现区分I和L

    使用Python实现区分I和L

    最讨厌分不清I与l,所以为了解决这个问题,这篇文章小编专门为大家介绍了如何使用Python实现区分这些混淆字符,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • OpenCV-Python实现轮廓拟合

    OpenCV-Python实现轮廓拟合

    本文将结合实例代码,介绍OpenCV-Python实现轮廓拟合,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • PyTorch中的torch.cat简单介绍

    PyTorch中的torch.cat简单介绍

    这篇文章主要介绍了PyTorch中的torch.cat,包torch包含了多维疑是的数据结构及基于其上的多种数学操作,包含了多维张量的数据结构以及基于其上的多种数学运算,更多相关资料 需要的小伙伴可以参考一下
    2022-03-03
  • Django实现图片上传功能步骤解析

    Django实现图片上传功能步骤解析

    这篇文章主要介绍了Django实现图片上传功能步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Python自定义指标聚类实例代码

    Python自定义指标聚类实例代码

    K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一,下面这篇文章主要给大家介绍了关于Python自定义指标聚类的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Django自定义过滤器定义与用法示例

    Django自定义过滤器定义与用法示例

    这篇文章主要介绍了Django自定义过滤器定义与用法,结合实例形式分析了Django自定义过滤器的概念、功能、定义及使用方法,需要的朋友可以参考下
    2018-03-03
  • Python实现XGBoost算法的应用实战

    Python实现XGBoost算法的应用实战

    XGBoost(Extreme Gradient Boosting)是一种高效且广泛使用的集成学习算法,它属于梯度提升树(GBDT)模型的一种改进,本文将结合实际案例,详细介绍如何在Python中使用XGBoost算法进行模型训练和预测,需要的朋友可以参考下
    2024-08-08
  • Python OpenCV超详细讲解调整大小与图像操作的实现

    Python OpenCV超详细讲解调整大小与图像操作的实现

    OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令,本篇文章带你通过OpenCV实现重调大小与图像裁剪
    2022-04-04
  • python压缩和解压缩模块之zlib的用法

    python压缩和解压缩模块之zlib的用法

    这篇文章主要介绍了python压缩和解压缩模块之zlib的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • python中将函数赋值给变量时需要注意的一些问题

    python中将函数赋值给变量时需要注意的一些问题

    变量赋值是我们在日常开发中经常会遇到的一个问题,下面这篇文章主要给大家介绍了关于python中将函数赋值给变量时需要注意的一些问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08

最新评论