目录

  • `json.dump()` 的语法
  • 参数说明
    • 1. `obj`
    • 2. `fp`
    • 3. `skipkeys`
    • 4. `ensure_ascii`
    • 5. `check_circular`
    • 6. `allow_nan`
    • 7. `cls`
    • 8. `indent`
    • 9. `separators`
    • 10. `default`
    • 11. `sort_keys`
    • **示例代码**
      • **基本用法**
      • 使用 `indent` 和 `separators`
    • 使用 `default` 参数
  • 总结

json.dump() 是 Python 中 json 模块用于将 Python 数据结构序列化为 JSON 格式并写入文件的方法。它提供了多个参数,用于控制序列化的行为和输出格式。以下是 json.dump() 的参数及其说明:

json.dump() 的语法

json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

参数说明

1. obj

  • 类型:任何可序列化的 Python 数据结构(如字典、列表、字符串、数字等)。
  • 说明:这是需要被序列化为 JSON 格式的 Python 对象。

2. fp

  • 类型:文件对象。
  • 说明:必须是一个支持 .write() 方法的文件对象,通常是通过 open() 函数以文本模式('w''a')打开的文件。

3. skipkeys

  • 类型:布尔值,默认为 False
  • 说明
    • 如果设置为 True,则在序列化字典时,会跳过那些键不是基本类型(如字符串、数字、元组等)的键值对。
    • 如果设置为 False,则会抛出 TypeError 异常,提示键不可序列化。

4. ensure_ascii

  • 类型:布尔值,默认为 True
  • 说明
    • 如果设置为 True,则输出的 JSON 字符串中所有非 ASCII 字符都会被转义为 Unicode 转义序列(如 \uXXXX)。
    • 如果设置为 False,则会直接输出非 ASCII 字符(如中文、日文等),这在处理国际化数据时非常有用。

5. check_circular

  • 类型:布尔值,默认为 True
  • 说明
    • 如果设置为 True,则在序列化过程中会检查对象是否包含循环引用(即对象引用自身)。如果发现循环引用,会抛出 ValueError 异常。
    • 如果设置为 False,则不会进行循环引用检查,但可能会导致程序崩溃或无限递归。

6. allow_nan

  • 类型:布尔值,默认为 True
  • 说明
    • 如果设置为 True,则允许序列化 float('nan')float('inf')float('-inf') 等特殊浮点值。
    • 如果设置为 False,则会抛出 ValueError 异常,提示这些值不可序列化。

7. cls

  • 类型:类,默认为 None
  • 说明
    • 指定一个自定义的 JSON 编码器类。如果需要自定义序列化逻辑,可以继承 json.JSONEncoder 并重写其方法。
    • 如果未指定,则使用默认的 json.JSONEncoder

8. indent

  • 类型:整数或字符串,默认为 None
  • 说明
    • 用于控制输出的 JSON 字符串的缩进格式。
    • 如果设置为整数,则表示缩进的空格数(例如 indent=4 表示每级缩进 4 个空格)。
    • 如果设置为字符串,则表示缩进的字符(例如 indent="\t" 表示每级缩进一个制表符)。
    • 如果设置为 None,则输出的 JSON 字符串不会进行格式化,而是紧凑的单行输出。

9. separators

  • 类型:元组,默认为 None
  • 说明
    • 指定 JSON 数据中键值对和数组元素之间的分隔符。
    • 默认值为 (', ', ': '),即键值对之间用逗号和空格分隔,键和值之间用冒号和空格分隔。
    • 如果需要紧凑的输出,可以设置为 (',', ':'),去掉多余的空格。

10. default

  • 类型:函数,默认为 None
  • 说明
    • 指定一个函数,用于处理无法直接序列化的对象。
    • json.dump() 遇到无法序列化的对象时,会调用这个函数,并将对象作为参数传入。该函数需要返回一个可序列化的值。

11. sort_keys

  • 类型:布尔值,默认为 False
  • 说明
    • 如果设置为 True,则在序列化字典时,会按照键的字典序对键值对进行排序。
    • 如果设置为 False,则不会对键值对进行排序,保持原始顺序。

示例代码

基本用法

import jsondata = {"name": "Alice","age": 25,"city": "New York","hobbies": ["reading", "traveling", "coding"]
}# 将数据写入 JSON 文件
with open("data.json", "w", encoding="utf-8") as file:json.dump(data, file, ensure_ascii=False, indent=4)

生成的 data.json 文件内容:

{"name": "Alice","age": 25,"city": "New York","hobbies": ["reading","traveling","coding"]
}

使用 indentseparators

import jsondata = {"name": "Alice","age": 25,"city": "New York"
}# 紧凑格式输出
with open("data.json", "w", encoding="utf-8") as file:json.dump(data, file, separators=(',', ':'))# 格式化输出
with open("data_pretty.json", "w", encoding="utf-8") as file:json.dump(data, file, indent=4)

生成的 data.json 文件内容(紧凑格式):

{"name":"Alice","age":25,"city":"New York"}

生成的 data_pretty.json 文件内容(格式化输出):

{"name": "Alice","age": 25,"city": "New York"
}

使用 default 参数

假设有一个包含日期对象的字典:

import json
from datetime import datetimedata = {"name": "Alice","birthday": datetime(1995, 5, 15)
}# 自定义序列化函数
def serialize_datetime(obj):if isinstance(obj, datetime):return obj.isoformat()raise TypeError(f"Type {type(obj)} is not serializable")# 将数据写入 JSON 文件
with open("data.json", "w", encoding="utf-8") as file:json.dump(data, file, default=serialize_datetime, indent=4)

生成的 data.json 文件内容:

{"name": "Alice","birthday": "1995-05-15T00:00:00"
}

总结

  • json.dump() 是一个功能强大的方法,用于将 Python 数据结构序列化为 JSON 格式并写入文件。
  • 它提供了丰富的参数,用于控制序列化的行为和输出格式,例如 ensure_asciiindentseparatorsdefault 等。
  • 通过合理使用这些参数,可以满足各种复杂的序列化需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88311.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88311.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88311.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LangGraph-2-interrupt 流程中断

interrupt 是 LangGraph 中一个强大的流程控制机制,允许在状态机执行过程中根据特定条件中断当前流程并跳转到其他节点。这种机制特别适用于处理异常情况、用户中断或特定业务规则的触发。在 LangGraph 中,interrupt_before 和 interrupt_after 是两个强…

前缀和|差分

题目:MT2047距离平方和你有𝑛n个点,请编写一个程序,求这𝑛n个点的距离的平方和。格式输入格式:第一行:一个整数𝑛(0≤𝑛≤100000)n(0≤…

x86架构CPU市场格局

x86架构的CPU市场是全球处理器市场的核心,涵盖PC(桌面端与移动端)、服务器和超算等领域,主要玩家为英特尔(Intel)和AMD。以下基于最新数据分析市场格局及各领域份额,辅以国产厂商动态。 1. 总体…

【Swift开发】屏蔽NSSecureCoding频繁警告

解决 iOS 开发中 NSSecureCoding 警告的最佳实践 问题背景 在开发 Mac 应用时,我遇到了一个令人困扰的问题:Xcode 控制台不断输出 NSSecureCoding allowed classes list contains [NSObject class] 相关的警告信息。这些警告虽然不影响应用功能&#xff…

SpringBoot实现MCP

前言 之前的文章都是各种使用MCP,自从有了MCP我们立马感受到大模型真的可以帮我们干活了,实际上当我们想把企业内部的业务向AI方向转型的话主要就是实现MCP,另外加上多Agent在流程上的控制和自有的知识库这就可以满足企业80%的需求了,剩下的2…

windows对\和/敏感吗?

在Windows系统中,路径分隔符\和/的敏感性需要分情况来看: 1. 文件系统层面 Windows文件系统(如NTFS、FAT32)不区分\和/。 例如,以下路径是等效的: C:\Users\Documents\file.txt C:/Users/Documents/file.tx…

缓存穿透与击穿多方案对比与实践指南

缓存穿透与击穿多方案对比与实践指南 问题背景介绍 在高并发的分布式系统中,缓存是提升读写性能的重要组件。但在实际生产环境中,经常会遇到两类问题: 缓存穿透:客户端频繁请求不存在的数据,导致请求直达数据库&#x…

【音视频】HTTP协议介绍

参考博客:https://cloud.tencent.com/developer/article/2183902 一、HTTP协议概述 HTTP(HyperText Transfer Protocol) 即 超文本传输协议,它是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网&#xff08…

神经网络基础及API使用详解

一、神经网络概述神经网络是一种模仿生物神经网络结构和功能的计算模型,它由大量的人工神经元相互连接构成,能够通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。1.1 神经网络的基本组成输入层:接收原始数据隐藏…

分桶表的介绍和作用

一、分桶表的基本介绍1、什么是分桶表?分桶表主要是用于分文件的,在建表的时候,指定按照那些字段执行分桶操作,并可以设置需要分多少个桶,当插入数据的时候,执行MR的分区的操作,将数据分散各个分…

HighReport报表工具开始支持BS报表设计器

HighReport报表工具同时支持c/s报表设计器和b/s报表设计器,大部分情况下使用c/s报表设计器,在某些业务场景或者用户自己简单修改报表模板,可以用b/s报表设计器。b/s报表设计器和c/s报表设计器操作一样b/s报表设计器免费下载免费使用(c/s报表设…

数据结构--堆的实现

目录 一、堆的概念及结构 二、小根堆的实现 2.1 堆的数据结构 2.2 堆的初始化HeapInit 2.3 堆的销毁HeapDestory 2.4 堆的插入HeapPush ​2.4.1 插入代码HeapPush 2.4.2 向上调整代码AdjustUp 2.4.3 交换数据代码Swap 2.5 堆的删除HeapPop 2.5.1 删除代码HeapPop 2…

evo轨迹评估工具

文章目录evo参数设置evo_traj指标度量evo_apeevo_rpe结果比较evo工具主要有如下六个常用命令: evo_ape - 用于评估绝对位姿误差;evo_rpe- 用于评估相对位姿误差;evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能&#xf…

Django+DRF 实战:自定义异常处理流程

文章目录一、DRF 异常处理流程DRF 默认异常处理流程源码二、实战DRF 自定义异常处理流程应用自定义异常处理流程一、DRF 异常处理流程 DRF 默认异常处理流程 DRF默认的异常处理流程如下: 当异常发生时,会自动调用rest_framework.views.exception_hand…

Spring MVC 1

什么是Spring Web MVC 官方对Spring MVC的描述是这样的:Spring Web MVC 是基于Severlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它…

一个基于若依(ruoyi-vue3)的小项目部署记录

一、背景 收到朋友的求助,他拿到了一个项目的源代码,说需要我帮助部署。部署要求是需要域名访问。 因为没有文档和其他资料以及帮助,我先清理了源收到的资料: 1.后端:是java代码,一看就是若依框架。心里大大…

【实战总结】WMIC在HW行动中的4类关键应用

WMIC命令完全指南:网络安全运维工程师的深度实践手册 关键词:WMIC命令、Windows管理、网络安全运维、系统信息收集、进程分析、自动化审计 【实战总结】WMIC在HW行动中的4类关键应用 1. 前言 在Windows环境下的网络安全运维中,WMIC&#x…

LKT4304稳定可靠高兼容性国产安全加密芯片

随着 IOT 的飞速发展,智能家居,智能汽车,智能工控等物联网设备和云服务的安全问题成为IOT普及的关键障碍。在设计之初就为物联网产品配备正确的安全解决方案,是帮助预防措施的关键所在。LKT4304是凌科芯安专为物联网应用场景而推出…

Android 网络开发核心知识点

Android 网络开发核心知识点 一、基础网络通信 1. HTTP/HTTPS 协议 HTTP方法:GET、POST、PUT、DELETE等状态码:200(成功)、404(未找到)、500(服务器错误)等HTTPS加密:SSL/TLS握手过程报文结构:请求头/响应头、请求体/响应体 2. 网…

DVWA靶场通关笔记-弱会话IDs(Weak Session IDs Medium级别)

目录 一、Session ID 二、代码审计(Medium级别) 1、配置security为Medium级别 2、源码分析 (1)index.php (2)Medium.php (3)对比分析 (4)渗透思路 三…