Python json序列化解读

 更新时间:2025年03月18日 08:38:58   作者:jay丿  
这篇文章主要介绍了Python json序列化解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

json 模块

  • JSON : 是 一种 轻量级的 数据交换格式 、独立于编程语言的 数据格式。
  • 数据格式 简单 、清晰。 便于 网络间数据的传输。

json 序列化 基本使用方式

序列化

  • Python中的对象转成 JSON格式的字符串
import json
ls = [{"name": "张三", "age": 20}, {"name": "李四", "age": 22}]
jsonstr = json.dumps(ls)
print(jsonstr)

dumps 方法中的参数

  • skipkeys:JSON中 的键 只支持 字符串 、数字、布尔 、null 表示 ,如果 在 python 中 提供了不支持的键类型, 则 必须将 skipkeys 设置为 True
ls = [{"name": "张三", "age": 20, (1,2): 100, None: 1}, {"name": "李四", "age": 22}]
jsonstr = json.dumps(ls, skipkeys=True)
print(jsonstr)
  • ensure_ascii : 对 ascii 之外的数据 进行 Unicode 编码 , 如果希望不进行编码,可以设置为 False
ls = [{"name": "张三", "age": 20, (1,2): 100, None: 1}, {"name": "李四", "age": 22}]
jsonstr = json.dumps(ls, skipkeys=True, ensure_ascii=False)
  • indent: 对 json 进行美化, 值是 一个 数字 、推荐使用 4
  • allow_nan : 对序列化的数据 是否 支持 非数 float(“nan”) 、 正无穷 float(“inf”) 、 负无穷 float(“-inf”)
  • default : 可以对 无法序列化的 对象 进行 特殊处理 (在序列化的时候,无法处理的类型 会触发 default 函数的调用。)
import json

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


if __name__ == '__main__':
 
    p1 = Person(name="张三", age=20)    #  p1.__dict__ :  可以获取一个对象的 字典表示形式。
    p2 = Person(name="李四", age=21)
    p3 = Person(name="王五", age=22)
    p4 = Person(name="赵六", age=20)
    person_list = [p1, p2, p3, p4]
    # 使用 JSON 序列化 将数据 转成 JSON字符串
    json_string = json.dumps(person_list, ensure_ascii=False, default=lambda obj: obj.__dict__, indent=2)

    print(json_string)
  • cls : 允许定义一个类 、该类需要 继承 json.JSONEncoder ,并重写 父类 中 default 方法, 解决数据无法序列化的问题。
from datetime import date, datetime

class Person:
    def __init__(self, name, age, birth=None):
        self.name = name
        self.age = age
        self.birth = birth


class JsonEncoder(json.JSONEncoder):
    def default(self, o):
        if hasattr(o, "__dict__"):
            return o.__dict__
        if isinstance(o, date):
            return o.strftime('%Y-%m-%d')

        if isinstance(o, datetime):
            return o.strftime('%Y-%m-%d %H:%M:%S')

        return str(o)


if __name__ == '__main__':
    p1 = Person(name="张三", age=20, birth=date(2000, 10, 10))
    print(p1.__dict__)
    p2 = Person(name="李四", age=21)
    p3 = Person(name="王五", age=22)
    p4 = Person(name="赵六", age=20)
    person_list = [p1, p2, p3, p4]
    # 使用 JSON 序列化 将数据 转成 JSON字符串
    json_string = json.dumps(person_list, ensure_ascii=False, cls=JsonEncoder, indent=2)

    print(json_string)
  • loads(string , object_hook=None)
import json
from datetime import date, datetime

# 创建一个 json格式的字符串
string = '[{"name": "张三", "age": 20, "birth": "1990-10-10"}, {"name": "李四", "age": 20, "birth": "1990-10-10"}]'


class Person:
    def __init__(self, name, age, birth=None):
        self.name = name
        self.age = age
        self.birth = birth

    def __repr__(self):
        return str(self.__dict__)


def test(kwargs):
    if "birth" in kwargs:
        kwargs["birth"] = datetime.strptime(kwargs["birth"], '%Y-%m-%d').date()

    return Person(**kwargs)


# 将 该字符串转成列表
ls = json.loads(string, object_hook=test)

print(ls)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Python中各种运算符的使用

    详解Python中各种运算符的使用

    在 Python 编程中,运算符是用于执行各种数学和逻辑操作的特殊符号,本文我们就深入探讨 Python 中的常见运算符,并通过丰富的案例来说明它们的用法和功能吧
    2023-07-07
  • python爬虫的数据库连接问题【推荐】

    python爬虫的数据库连接问题【推荐】

    这篇文章主要介绍了python爬虫的数据库连接问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • Python tkinter进度条控件(Progressbar)的使用

    Python tkinter进度条控件(Progressbar)的使用

    这篇文章主要介绍了Python tkinter进度条控件(Progressbar)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python中有几个关键字

    Python中有几个关键字

    在本篇文章里小编给大家分享的是一篇关于Python中关键字个数的相关知识点内容,需要的朋友们可以学习下。
    2020-06-06
  • 详解Python如何优雅地解析命令行

    详解Python如何优雅地解析命令行

    随着我们编程经验的增长,对命令行的熟悉程度日渐加深,想来很多人会渐渐地体会到使用命令行带来的高效率。本文将介绍Python解析命令行的两种方法,需要的可以参考一下
    2022-06-06
  • echarts动态获取Django数据的实现示例

    echarts动态获取Django数据的实现示例

    本文主要介绍了echarts动态获取Django数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 利用Python实现简单的验证码处理

    利用Python实现简单的验证码处理

    这篇文章主要介绍了利用Python实现简单的验证码处理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • python爬取淘宝商品详情页数据

    python爬取淘宝商品详情页数据

    这篇文章主要为大家详细介绍了python爬取淘宝商品详情页数据的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • python通配符之glob模块的使用详解

    python通配符之glob模块的使用详解

    这篇文章主要介绍了python通配符之glob模块的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • tensorflow 初始化未初始化的变量实例

    tensorflow 初始化未初始化的变量实例

    今天小编就为大家分享一篇tensorflow 初始化未初始化的变量实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02

最新评论