json模块(高维数据的存储与读取)

2024-02-09 17:36

本文主要是介绍json模块(高维数据的存储与读取),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

json模块是 Python 标准库中的一个模块,用于处理 JSON(JavaScript Object Notation)格式的数据。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。模块提供了在 Python 中进行 JSON 编码(序列化)和解码(反序列化)的功能。json

以下是 json模块的主要函数和用法:

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

将 Python 对象 obj转换为 JSON 格式的字符串。

这些参数提供了在序列化过程中控制行为的灵活性,可以根据需要选择适当的参数值。

  • obj:必需参数,要序列化为 JSON 字符串的 Python 对象。通常是字典、列表、元组等可序列化的对象。

  • skipkeys(默认为 False):如果设置为 True,在序列化字典对象时跳过非字符串键。如果字典包含非字符串键,则会引发 。默认情况下,这个参数是 False,表示不跳过非字符串键。TypeError

  • ensure_ascii(默认为 True):如果设置为 True,所有非 ASCII 字符将转义为 ASCII。如果设置为 False,则允许非 ASCII 字符原样输出。默认情况下,这个参数是 True。

  • check_circular(默认为 True):如果设置为 True,检查循环引用(例如,一个对象是另一个对象的属性,而后者又是前者的属性)。如果检测到循环引用,会引发 。如果设置为 False,将不会检查循环引用,但可能导致无限递归和堆栈溢出。默认情况下,这个参数是 True。ValueError

  • allow_nan(默认为 True):如果设置为 True,允许 JSON 中的 NaN、Infinity 和 -Infinity。如果设置为 False,将不允许这些特殊的浮点数值,而是引发 。默认情况下,这个参数是 True。ValueError

  • cls:用于指定自定义的 JSON 编码器类。这个参数应该是一个 JSONEncoder 的子类。默认情况下,使用 类进行编码。json.JSONEncoder

  • indent:用于指定缩进的空格数,使生成的 JSON 字符串更易读。默认情况下,不进行缩进,即不进行格式化。

  • separators:用于指定不同部分之间的分隔符,应该是一个包含两个字符的元组,例如 。第一个字符用于分隔项之间的间隔,第二个字符用于分隔键值对之间的间隔。默认情况下,使用 和 作为分隔符。(',', ':'),:

  • default:用于指定一个函数,用于将非序列化的对象转换为可序列化的类型。例如,可以指定一个函数来处理自定义对象的序列化。默认情况下,如果遇到无法序列化的对象类型,则引发 。TypeError

  • sort_keys(默认为 False):如果设置为 True,在输出 JSON 字符串时对键进行排序。默认情况下,这个参数是 False,表示不对键进行排序。

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

  • 将 Python 对象obj 序列化为 JSON 格式,并写入文件对象 fp
  • 参数与 dumps类似。

3.json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):

将 JSON 格式的字符串s 解码为 Python 对象。

  • s:必需参数,要反序列化的 JSON 格式的字符串。

  • encoding(可选):指定 JSON 字符串的编码方式。默认情况下,json.loads() 将假设输入的 JSON 字符串是使用 UTF-8 编码的。如果 JSON 字符串使用其他编码方式,可以通过这个参数指定编码方式,例如 'utf-16'

  • cls(可选):用于自定义 JSON 解码器的类。这个参数应该是一个 JSONDecoder 的子类。通过传递自定义的解码器类,可以实现更复杂的 JSON 数据解析逻辑。

  • object_hook(可选):用于在解码 JSON 字符串时,对解析出的字典对象进行自定义处理的回调函数。这个函数将在每个解析出的 JSON 对象转换为 Python 字典之后被调用,可以用于执行额外的处理操作,例如将字典转换为自定义对象。

  • parse_float(可选):用于指定 JSON 字符串中浮点数的解析方式的回调函数。默认情况下,json.loads() 将使用 Python 的 float() 函数解析浮点数。

  • parse_int(可选):用于指定 JSON 字符串中整数的解析方式的回调函数。默认情况下,json.loads() 将使用 Python 的 int() 函数解析整数。

  • parse_constant(可选):用于指定 JSON 字符串中特殊常量(如 nulltruefalse)的解析方式的回调函数。默认情况下,json.loads() 将使用 Python 的 NoneTrue 和 False 来表示这些特殊常量。

  • object_pairs_hook(可选):用于在解码 JSON 字符串时,对解析出的字典对象进行自定义处理的回调函数。与 object_hook 不同的是,这个函数将在每个解析出的 JSON 对象转换为 Python 字典的键值对之后被调用。

4.json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):

  • 从文件对象fp 中读取 JSON 数据并解码为 Python 对象fp
  • 参数与 loads类似。

示例:

import json# 将 Python 对象转换为 JSON 字符串
data = {'name': 'John', 'age': 30, 'city': 'New York'}
json_str = json.dumps(data, indent=2)
print(json_str)# 将 JSON 字符串转换为 Python 对象
json_data = '{"name": "John", "age": 30, "city": "New York"}'
python_obj = json.loads(json_data)
print(python_obj)
  • 在第一个部分中,json.dumps() 用于将 Python 字典 data 转换为格式化良好的 JSON 字符串,然后使用 print() 打印输出。
  • 在第二个部分中,json.loads() 用于将 JSON 字符串 json_data 反序列化为 Python 对象,并将结果存储在变量 python_obj 中。然后同样使用 print() 打印输出这个 Python 对象。

这个代码演示了在将数据从 Python 对象转换为 JSON 字符串(序列化)和从 JSON 字符串转换回 Python 对象(反序列化)的基本操作。

import json# 定义一个 Python 字典对象
data = {'name': 'John','age': 30,'city': 'New York'
}# 将字典对象保存到 JSON 文件中
with open('data.json', 'w') as f:json.dump(data, f)# 从 JSON 文件中加载数据
with open('data.json', 'r') as f:loaded_data = json.load(f)print(loaded_data)  # 输出: {'name': 'John', 'age': 30, 'city': 'New York'}

在这个例子中:

  • 首先定义了一个简单的 Python 字典data ,其中包含了一些基本的用户信息。
  • 然后,使用json.dump() 将这个字典对象保存到名为data.json 的文件中。通过传递文件对象和字典对象作为参数,json.dump() 将字典对象转换为 JSON 格式的字符串,并将其写入文件中。
  • 接着,使用 json.load()data.json 文件中加载数据。json.load() 从文件中读取 JSON 格式的数据,并将其转换为 Python 对象。
  • 最后,打印加载的数据,验证它与原始字典对象相同。

这个例子展示了如何使用json.dump() 将 Python 对象保存到 JSON 文件中,以及如何使用json.load() 从 JSON 文件中加载数据并将其转换回 Python 对象。

这篇关于json模块(高维数据的存储与读取)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694873

相关文章

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co