Python 中的json模块dumps参数详解

【python学习】一篇带你玩转 Python JSON 操作的终极指南:dump、dumps、load、loads 全解析 json.dump: 用于将 Python 对象转换为 JSON 字符串并写入文件。json.dumps: 用于将 Python 对象转换为 JSON 字符串。json.load: 用于从文件中读取 JSON 数据并解析为 Python 对象。json.loads: 用于将 JSON 字符串解析为 Python 对象。通过掌握这些函数,你可以轻松地在 Python 中处理 JSON 数据,无论是读写文件还是处理网络请求中的 JSON 数据,都变得非常简单和高效。 阅读详情

1.什么是JSON

维基百科中的定义: JSON(JavaScript Object Notation,JavaScript对象表示法)是一种由道格拉斯·克罗克福特构想和设计、轻量级的资料交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。

一个数据示例:

{
    "firstName": "Micheal",
    "lastName": "Jordan",
    "hobbies": ["running", "golfing", "singing"],
    "age": 35,
    "children": [
        {
            "firstName": "Marcus",
            "age": 14
        },
        {
            "firstName": "Jeffrey",
            "age": 12
        }
    ]
}

JSON 支持原始类型,如数字, 字符串,以及嵌套列表和对象。

JSON 的编码过程通常称为序列化。该术语是指将数据对象转换为一系列字节以通过网络存储或传输

2. Python中的json

2.1 序列化 json.dump 和 json.dumps

  • dump 将数据写入文件
  • dumps 将数据生成字符串,  dump+str

代码示例

In [1]: import json

In [2]: json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
Out[2]: '["foo", {"bar": ["baz", null, 1.0, 2]}]'

将数据dump到文件

In [3]: with open('data.json', 'w')  as f:
   ...:     data = {'database': 'mongo'}
   ...:     json.dump(data, f)

数据 {"database": "mongo"} 被写入到data.json文件中

2.2 反序列化 json.load 和 json.loads

  • load 将文件中的JSON数据载入为对象
  • loads 将序列化的json字符串, 载入为JSON对象

 通过表格可以看到, 反序列化并不是对序列化表的完美逆向,  反序列化不能生成tuple类型的数据.

In [4]: data = ('amigo', 'branda', 'ariza')
In [5]: json.loads(json.dumps(data))
Out[5]: ['amigo', 'branda', 'ariza']

2.3 dumps的参数

dumps函数提供一些参数, 可以控制序列化过程中的行为.

参数描述默认值
skipkeys是否跳过无法被JSON序列化的key(包括str, int, float, bool, None)False
sort_keys是否对数据按照key进行排序False
ensure_ascii输出保证将所有输入的非 ASCII 字符转义True
allow_nan是否允许JSON规范外的float数据(nan, inf, -inf)True
default是一个函数, 当某个value无法被序列化时, 对其调用该函数None
indent是一个正整数,  代表序列化后的缩进None
separator是一个格式为 (item_separator, key_separator) 的元组, 默认取值为 (', ', ': ')None
check_circular是否检查循环引用True

下面使用一些数据示例依次说明:

2.3.1 skipkeys

In [1]: import json

In [2]: def func():
   ...:     print('fun')

In [3]: data = {func: 'value', 'key': 'data'}

In [4]: json.dumps(data)
---------------------------------------------------------------------------
TypeError: keys must be str, int, float, bool or None, not function

In [5]: json.dumps(data, skipkeys=True)
Out[5]: '{"key": "data"}'

字典数据 data 中的其中一个key是个函数func, 无法直接被JSON序列化, 所以对其执行json.dumps时, 报TypeError, 将skipkeys置为True, 序列化时跳过键值func, 序列化成功.

2.3.2 sort_keys

In [6]: data = {'c': 3, 'b': 2, 'a': 1}

In [7]: json.dumps(data)
Out[7]: '{"c": 3, "b": 2, "a": 1}'

In [8]: json.dumps(data, sort_keys=True)
Out[8]: '{"a": 1, "b": 2, "c": 3}'

指定sort_keys=True之后, 序列化后的数据按照key值[a, b, c]进行排序

2.3.3 ensure_ascii

In [13]: data = {'first': '大牛', 'second': '二狗', 'third': '猫蛋'}

In [14]: json.dumps(data)
Out[14]: '{"first": "\\u5927\\u725b", "second": "\\u4e8c\\u72d7", "third": "\\u732b\\u86cb"}'

In [15]: json.dumps(data, ensure_ascii=False)
Out[15]: '{"first": "大牛", "second": "二狗", "third": "猫蛋"}'

dunps时, 指定了ensure_ascii=False使序列化后的数据不强制使用ascii吗转码, 输出即是中文

2.3.4 allow_nan

In [9]: data = {'float': 1.2, 'nan': float('nan'), 'inf': float('inf')}
In [10]: data
Out[10]: {'float': 1.2, 'nan': nan, 'inf': inf}

In [11]: json.dumps(data)
Out[11]: '{"float": 1.2, "nan": NaN, "inf": Infinity}'

In [12]: json.dumps(data, allow_nan=False)
ValueError: Out of range float values are not JSON compliant

指定allow_nan=False之后, 被序列化对象包含,超出范围的float数据, 报ValueError

 2.3.5 default

In [1]: from datetime import datetime
In [2]: import json

In [3]: data = {'date': datetime.now()}
In [3]: json.dumps(data)
TypeError: Object of type datetime is not JSON serializable

In [4]: json.dumps(data, default=lambda x: x.strftime('%Y/%m/%d %H:%M'))
Out[4]: '{"date": "2021/08/13 11:03"}'

数据data中包含无法被序列化的对象, date字段为datetime.datetime格式的数据, 直接调用json.dumps报TypeError, 指定default函数之后, 对date的字段应用函数转换成字符串格式, 序列化成功.

2.3.6 indent

In [5]: data = {'lgd': {'players': ['ame', 'nothingtosay', 'faith_bian', 'xinQ', 'y`'], 'coach': 'xiao8'}, 'VG': {'players': ['poyoyo', 'ori', 'old_eleven', 'pyw', 'dy']}}

In [6]: print(json.dumps(data))
{"lgd": {"players": ["ame", "nothingtosay", "faith_bian", "xinQ", "y`"], "coach": "xiao8"}, "VG": {"players": ["poyoyo", "ori", "old_eleven", "pyw", "dy"]}}

In [7]: print(json.dumps(data, indent=4))
{
    "lgd": {
        "players": [
            "ame",
            "nothingtosay",
            "faith_bian",
            "xinQ",
            "y`"
        ],
        "coach": "xiao8"
    },
    "VG": {
        "players": [
            "poyoyo",
            "ori",
            "old_eleven",
            "pyw",
            "dy"
        ]
    }
}

dumps时, 设置indent=4, 数据增加换行符, 数据层级以4个空格为缩进.

2.3.7 separator

In [8]: data
Out[8]: {'key': 'value', 'border': 'lands'}

In [9]: json.dumps(data)
Out[9]: '{"key": "value", "border": "lands"}'

In [10]: json.dumps(data, separators=(',', ':'))
Out[10]: '{"key":"value","border":"lands"}'

In [11]: json.dumps(data, separators=('&', '@'))
Out[11]: '{"key"@"value"&"border"@"lands"}'

默认数据分割符为 ', ' 和 ': ', 通过指定separators=(',', ':')去除空格后, 可以使序列化后的数据更加紧凑. 甚至可以自定义连接符来dump成自定义的数据样式.

2.3.8 check_circular

In [21]: data = {'key': 'value', 'border': 'lands'}
In [22]: data['data'] = data
In [23]: data
Out[23]: {'key': 'value', 'border': 'lands', 'data': {...}}

In [24]: json.dumps(data)
---------------------------------------------------------------------------
ValueError: Circular reference detected

In [25]: json.dumps(data, check_circular=False)
---------------------------------------------------------------------------
RecursionError: maximum recursion depth exceeded while encoding a JSON object

当data中存在对自己的递归引用时, json.dumps 会报ValueError, 指定指定check_circular=False后, 不进行循环引用检验.

总结:

本文总结了python内置模块json的常用方法 dump和load

序列化过程中的一些参数控制总结:

① 无法序列化的数据, key的跳过, value使用函数转换

② 数据的排序, 编码, 非法float数据

③ 缩进和分隔符

需要更高级的对JSON数据的处理方法,参见 :

处理JSON 数据的神器: JMESPath

【json.dump()】的用法和【pickle.dump()】的用法 在这个示例中,我们首先定义了一个 Python 字典 data,然后使用 json.dump() 函数将其序列化为 JSON 字符串,并将该字符串写入名为 “data.json” 的文件中。函数用于将 Python 对象序列化为 JSON 格式的字符串,并将该字符串写入文件。它接受两个参数:要序列化的 Python 对象和要写入的文件对象。如果希望在写入 JSON 数据时使用更友好的格式(如缩进和换行),可以通过传递。此时写入到文件中的 JSON 数据将会更易读。 阅读详情

相关推荐

Python必学模块之JSON模块

文章目录一、什么是JSON?1.1 JSON支持数据格式二、python中JSON模块2.1 python数据类型与JSON数据类型的映射关系2.2 JSON模块常用方法三、JSON系列化(编码)实例3.1 dumps() 方法3.2 dump()方法3.3 ascii 字符码3.4 dumps参数详解3.5 dump参数详解四、JSON系列化(编码)实例4.1 json.loads()方法4...

金鞍少年的博客 2802

【Python】json.dumps()函数详解和示例

json.dumps() 是 Python 中 json 模块的一个函数,用于将 Python 对象编码为 JSON 格式的字符串。这个函数非常有用,当你需要将 Python 对象保存为 JSON 文件,或者通过网络传输到另一个系统时,它可以很方便地将 Python 数据结构转换为 JSON 格式。

不定时分享,互相学习,共同进步 2万+

Python中的json.dumps和json.loads函数详解

其中,json.dumps和json.loads是两个常用的函数,用于将Python对象转换为JSON格式的字符串,以及将JSON格式的字符串转换为Python对象。综上所述,json.dumps和json.loads是Python中处理JSON数据的常用函数。无论是将Python对象转换为JSON字符串,还是将JSON字符串转换为Python对象,json.dumps和json.loads函数都是非常方便和实用的工具。json.dumps函数用于将Python对象转换为JSON格式的字符串。

. 969

json.dumps()函数解析

json.dumps() json.dumps将一个Python数据结构转换为JSON import json data = { 'name' : 'myname', 'age' : 100, } json_str = json.dumps(data) json库的一些用法 方法 作用 json.dumps() 将python对象编码成Json字符串 json.loads() 将Json字符串解码成python对象 json.dump() 将python中的对象转化

dididi的博客 19万+

python的JSON用法——dumps的各种参数用法(详细)

目录一、JSON是什么1.json的数据类型和python数据类型的区别2.json库的一些方法二、json.dump()和json.dumps()的区别1.json.dumps()2.json.dump()3.dumps的一些参数(重点)4.dump的参数三、json.load()和json.loads()的区别1.json.loads()2.json.load() 一、JSON是什么 JSON 是用于存储和交换数据的语法。JSON (JavaScript Object Notation)最初是用 JavaScript 对象表示法编写的文本,但随后成为了一种常见格式,被包括Python在内的

Day 41 41.2 Python中json模块之dumps参数详解

Python的JSON用法之dumps的各种参数用法(详细) JSON 是用于存储和交换数据的语法。 JSON (JavaScript Object Notation)最初是用 JavaScript 对象表示法编写的文本,但随后成为了一种常见格式,被包括Python在内的众多语言采用。 在使用json方法的时候要记住先引进这个库 import json python里面的语言对象一般只...

Chimengmeng的博客 1700

TMC22系列步进电机驱动设计:从静音原理到硬件实战

步进电机驱动是运动控制系统的核心,其性能直接影响设备的精度、噪音和效率。传统驱动方案如A4988采用方波控制,存在转矩脉动大、运行噪音高等问题。而高性能驱动通过优化电流波形与切换策略,从根本上提升了运动质量。其中,**StealthChop2**技术通过同步MOSFET开关与电机反电动势过零点,实现了近乎无声的低速运行;**SpreadCycle**模式则通过逼近正弦波的电流调节,优化了中高速动态性能。这些技术为3D打印机、CNC机床、自动化设备等对静音和精度有要求的场景提供了关键解决方案。本文以广泛应用的

weixin_31858171的博客 353

python json load和loads_Python中的json模块的dump和dumps、load和loads的功能

Python中的json模块的dump和dumps、load和loads的功能JSON首先简单介绍一下json格式文件。json是JavaScript Object Notation的缩写。顾名思义,json来源于js的对象的格式。现在json已经不在局限于某种语言,而是一种通用的,比xml更轻量级的数据交换形式。json 的基本格式可以看做是嵌套的字典。通俗来讲,就是再字典中的某个元素的值还是一...

weixin_39914863的博客 168

KVNAND架构:解决边缘设备部署LLM的内存与带宽挑战

大语言模型(LLM)在边缘设备部署时面临内存容量和带宽限制的核心挑战。传统方案依赖DRAM存储KV缓存,导致高昂成本和性能瓶颈。闪存计算(IFC)通过计算单元下沉和流水线优化缓解部分问题,但仍受限于DRAM依赖。KVNAND架构创新性地将KV缓存直接存储在3D NAND闪存中,结合异构计算和页面级KV映射技术,显著降低延迟和能耗。该架构特别适用于长上下文场景,如文档分析和个人助理应用,能有效解决内存溢出(OOM)问题并提升计算单元利用率。关键技术包括头组并行(HG)执行和混合键合设计,为边缘AI部署提供了新

weixin_27215337的博客 320

unity转微信小游戏:UI大小设置

unity转微信小游戏:UI大小设置

会潜水的小火龙的博客 3276

Python代码json格式化输出的几种方法

JSON(JavaScript 对象表示法)是一种流行的数据交换格式,广泛用于 Web 应用程序、API 和数据库。它是一种轻量级且易于人类阅读的格式,易于解析和生成。

u010071535的博客 2844

在macOS上使用GitHub的超详细指南

GitHub:免费的远程仓库,可用来托管自己的开源项目。它利用了Git强大的克隆和分支功能,让我们参与别人的开源项目和让别人参与自己的开源项目变得简单高效。

Mars的博客 3391

Python中的json操作

1.什么是Json? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写。 前端和后端进行数据交互,其实就是JS和Python进行数据交互 JSON注意事项: (1)名称必须用双引号(即:””)来包括 (2)值可以是双引号包括的字符串、数字、true、false、null、JavaScript数组...

小菜鸟的博客 8万+

北斗导航 | ILS(仪表着陆系统)、MLS(微波着陆系统)和GBAS(地基增强系统)的性能对比

最 早 的 GBAS 系 统 是 **局 域 增 强 系 统(LAAS)**,它是 1990 年由美国 Honeywell 公司 和 NASA 共 同 完 成 的 差 分 GPS(DGPS)演 变 而 来 的。1998 年,LAAS 被 ICAO 采 纳为 GBAS。2009 年 9 月 3 日 Honeywell 公 司 的GBAS 系统通过了 **CAT-I 精密进近着陆系统**的设计认证 ,而 **CAT-II 和 CAT-III 系统的研发和验证工作也正在有序的进行中**

尘世冰封的专栏 3987

自助结账商品检测(Scanned Item Detection)——基于YOLOv8的RPC数据集实战

RPC数据集是由中国科学院自动化研究所发布的零售商品结账检测公开数据集,广泛用于自助结账和零售场景下的目标检测与识别。YOLOv8是YOLO系列最新版本,由Ultralytics推出,继承了YOLO家族的高效快速和高准确性,适用于实时检测场景。本文系统介绍了基于YOLOv8的RPC数据集自助结账商品检测方案,涵盖数据准备、训练、推理及UI界面设计。未来,可结合多模态感知、RFID融合技术,打造更加智能和稳定的自助结账系统。

YOLO 252

python 序列化 json_python如何序列化json数据

使用json模块提供的loads方法和dumps方法,可以很方便的载入和读取json数据格式。而在具体实际应用中,我们使用python数据格式是 string、list 或dict等,这类格式如何直接转换为json格式呢?可以借用python内部的__dict__ 字典方法将格式转换为json格式并读取,不带参数示例如下:一、不带参数的class类转化为jsonclass Foo(object):...

weixin_39640849的博客 82

采样率转化代码C++(有理倍数,升采样、降采样均可)

【代码】采样率转化(有理倍数,升采样、降采样均可)

goudahai的专栏 547

Python中json.dumps()函数

Python中json.dumps()函数

m0_51623564的博客 3160

SAP RAP 里的 EML 全解:从语言定位到事务语义,再到真实案例的落地方式

摘要:EML(Entity Manipulation Language)是ABAP RAP模型的核心组件,作为ABAP的子集用于操作业务对象(BO)。它通过声明式语法(READ/MODIFY/EXECUTE/COMMIT)统一访问BO的行为与数据,并由RAP运行时自动处理校验、锁定、草稿管理等生命周期。EML将业务语义融入代码,确保与Fiori应用共享同一套校验逻辑,并通过FAILED/REPORTED/MAPPED管道传递错误与消息。其事务控制(IN LOCAL MODE与COMMIT ENTITIES)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 528

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Python】JSON模块的使用

python的json模块的简单使用

apythonlearner的博客 3334

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python笔记-----数据交换(json模块)

Json模块 json模块用于数据交换,将python数据存储到磁盘,及从磁盘中读取数据到程序中 应用场景:一些重复使用,重要的python数据,通过json模块存储到文件中,后续如果需要,重新从文件中读取. 因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。 json.dump() ----序列化,python数据转换成json格式的数据,并存储到文件 json.dumps()----序列化,python转换成json格式字符串, 不存储在文件中 json.l

Lcicada_2021的博客 276

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python JSON dumps与loads傻傻分不清

Python JSON dumps与loads傻傻分不清

Mrlijie00的博客 533

python json文本处理详解

json介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 数据格式可以简单地理解为键值对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列

爱死亡机器人 1021

Python的JSON用法--dumps的各种参数用法(详细)

python里面的语言对象一般只有python能读懂,为了能比较好储存,而且能够让别的编程语言也能读懂这些数据,就会用json来转换储存。或者说把json数据类型的转化成python的数据类型。

荷塘月色 395
上一篇: Python中的数据类dataclass详解
下一篇: Python中生成随机数据random模块总结
be5yond
博客等级 码龄10年 590粉丝 123原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值