首页 > 编程语言 >Python | import json模块详解

Python | import json模块详解

时间:2023-06-22 11:34:05浏览次数:47  
标签:自定义 Python JSON json 参数 字符串 import

json是Python内置的一个用于处理JSON数据的模块。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序之间的数据传输。

json模块提供了四个主要的方法:

  1. json.dumps() - 将Python对象转换为JSON格式的字符串。
  2. json.loads() - 将JSON格式的字符串转换为Python对象。
  3. json.dump() - 将Python对象转换为JSON格式的字符串并写入文件。
  4. json.load() - 从文件中读取JSON格式的字符串并将其转换为Python对象。

json.dumps()

作用:将Python对象转换为JSON格式的字符串。

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)
  • obj:需要转换为JSON格式的Python对象。
  • skipkeys:如果为True,则跳过那些包含非字符串键的字典项,否则会引发TypeError,默认为False。
  • ensure_ascii:如果为True,则所有非ASCII字符都将被转义为Unicode转义序列,否则就像原样输出,默认为True。
  • check_circular:如果为True,则检查循环引用,否则会引发ValueError,默认为True。
  • allow_nan:如果为True,则允许NaN、Infinity和-Infinity等非有限数的存在,否则会引发ValueError,默认为True。
  • cls:用于自定义JSON编码器的类。
  • indent:为生成的JSON格式字符串设置缩进格式,可以是整数或字符串类型,默认为None。
  • separators:用于指定分隔符,可以包含以下两个字符的任意组合:',', ': ',默认为(',', ': ').
  • default:用于指定一个自定义函数,用于将非JSON类型的数据转换为JSON可序列化的对象。
  • sort_keys:如果为True,则按照字典键的升序排列输出,否则按照插入顺序输出,默认为False。

这些参数的详细说明:

  • obj参数:需要转换为JSON格式的Python对象。
  • skipkeys参数:如果为True,则跳过那些包含非字符串键的字典项,否则会引发TypeError,默认为False。
  • ensure_ascii参数:如果为True,则所有非ASCII字符都将被转义为Unicode转义序列(比如"\uXXXX"),否则就像原样输出,默认为True。
  • check_circular参数:如果为True,则检查循环引用,否则会引发ValueError,默认为True。
  • allow_nan参数:如果为True,则允许NaN、Infinity和-Infinity等非有限数的存在,否则会引发ValueError,默认为True。
  • cls参数:用于自定义JSON编码器的类。如果指定了该参数,则json模块将使用指定的编码器类来编码Python对象,默认为None。
  • indent参数:为生成的JSON格式字符串设置缩进格式,可以是整数或字符串类型。如果指定为整数,则表示缩进的空格数;如果指定为字符串类型,则该字符串将作为缩进符号。如果不指定该参数,则不进行缩进,默认为None。
  • separators参数:用于指定分隔符,可以包含以下两个字符的任意组合:','(用于分隔各个元素)和': '(用于分隔键和值)。默认为(',', ': ')。
  • default参数:用于指定一个自定义函数,用于将非JSON类型的数据转换为JSON可序列化的对象。如果指定了该参数,则在编码Python对象时,json模块会调用该函数对非JSON类型的数据进行转换,默认为None。
  • sort_keys参数:如果为True,则按照字典键的升序排列输出,否则按照插入顺序输出,默认为False。

例子:

json.dumps()方法用于将Python对象转换为JSON格式的字符串。假设我们有一个Python字典对象,内容如下:

data = {
    "name": "John Smith",
    "age": 30,
    "city": "New York",
    "languages": ["English", "Spanish", "French"],
    "isMarried": True,
    "education": {
        "degree": "Master's Degree",
        "school": "New York University"
    }
}

我们可以使用json.dumps()方法将该Python字典对象转换为JSON格式的字符串,示例代码如下:

import json

# 使用json.dumps()方法将Python字典对象转换为JSON格式的字符串
json_str = json.dumps(data)

# 输出转换后的JSON格式的字符串
print(json_str)

运行上述代码,输出结果如下:

{
    "name": "John Smith",
    "age": 30,
    "city": "New York",
    "languages": ["English", "Spanish", "French"],
    "isMarried": true,
    "education": {
        "degree": "Master's Degree",
        "school": "New York University"
    }
}

可以看到,使用json.dumps()方法将Python字典对象转换为了JSON格式的字符串,并输出了该字符串。

json.loads()

作用:将JSON格式的字符串转换为Python对象。

json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
  • s:需要转换的JSON格式的字符串。
  • cls:用于自定义JSON解码器的类。
  • object_hook:用于自定义对象的解码函数。
  • parse_float:用于自定义浮点数解码的函数。
  • parse_int:用于自定义整数解码的函数。
  • parse_constant:用于自定义常量解码的函数。
  • object_pairs_hook:用于自定义对象解码的函数。
  • **kw:其他关键字参数。

这些参数的详细说明:

  • cls参数:该参数接受一个自定义的解码器类。如果指定了该参数,则json模块将使用指定的解码器类来解码JSON格式的字符串。该类必须是JSONDecoder的子类,它可以重载decode()方法来定制解码方式。如果未指定该参数,则默认使用JSONDecoder
  • object_hook参数:该参数接受一个可调用对象,用于自定义Python对象的解码方式。当解码器解码JSON格式的字符串时,它会遇到一个JSON对象(即一个键值对),并将其转换为Python字典对象。如果指定了该参数,则解码器会将Python字典对象传递给该可调用对象,以便用户可以自定义它的解码方式。
  • parse_float参数:该参数接受一个可调用对象,用于自定义浮点数的解码方式。如果指定了该参数,则解码器会将JSON格式的浮点数转换为Python浮点数,然后将其传递给该可调用对象,以便用户可以自定义它的解码方式。
  • parse_int参数:该参数接受一个可调用对象,用于自定义整数的解码方式。如果指定了该参数,则解码器会将JSON格式的整数转换为Python整数,然后将其传递给该可调用对象,以便用户可以自定义它的解码方式。
  • parse_constant参数:该参数接受一个可调用对象,用于自定义常量的解码方式。如果指定了该参数,则解码器会将JSON格式的常量(即truefalsenull)转换为Python对象,然后将其传递给该可调用对象,以便用户可以自定义它的解码方式。
  • object_pairs_hook参数:该参数接受一个可调用对象,用于自定义Python对象的解码方式。当解码器解码JSON格式的字符串时,它会遇到一个JSON对象(即一个键值对),并将其转换为Python元组对象。如果指定了该参数,则解码器会将Python元组对象传递给该可调用对象,以便用户可以自定义它的解码方式。
  • **kw参数:该参数用于接收其他关键字参数,如encoding(指定编码方式)、parse_float(指定浮点数格式)等。

例子:

json.loads()方法用于将JSON格式的字符串转换为Python对象。假设我们有一个JSON格式的字符串,内容如下:

{
    "name": "John Smith",
    "age": 30,
    "city": "New York",
    "languages": ["English", "Spanish", "French"],
    "isMarried": true,
    "education": {
        "degree": "Master's Degree",
        "school": "New York University"
    }
}

我们可以使用json.loads()方法将该JSON格式的字符串转换为Python对象,示例代码如下:

import json

# 定义JSON格式的字符串
json_str = '''
{
    "name": "John Smith",
    "age": 30,
    "city": "New York",
    "languages": ["English", "Spanish", "French"],
    "isMarried": true,
    "education": {
        "degree": "Master's Degree",
        "school": "New York University"
    }
}
'''

# 使用json.loads()方法将JSON格式的字符串转换为Python对象
data = json.loads(json_str)

# 输出转换后的Python对象
print(data)

运行上述代码,输出结果如下:

{
    'name': 'John Smith',
    'age': 30,
    'city': 'New York',
    'languages': ['English', 'Spanish', 'French'],
    'isMarried': True,
    'education': {
        'degree': "Master's Degree",
        'school': 'New York University'
    }
}

可以看到,使用json.loads()方法将JSON格式的字符串转换为了一个Python字典对象,并输出了该对象。

json.dump()

作用:将Python对象转换为JSON格式的字符串并写入文件。

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)
  • obj:需要转换的Python对象。
  • fp:文件对象,用于写入JSON格式的字符串。
  • skipkeys:如果为True,则会跳过不能被JSON序列化的键值对。
  • ensure_ascii:如果为True(默认值),则所有非ASCII字符都将被转义为\uXXXX序列;如果为False,则保留原样。
  • check_circular:如果为True(默认值),则检查循环引用;如果为False,则不检查。
  • allow_nan:如果为True(默认值),则可以序列化NaN, Infinity和-Infinity;如果为False,则会抛出ValueError错误。
  • cls:用于自定义JSON编码器的类。
  • indent:用于控制缩进的空白字符串,可以是整数或字符串。
  • separators:用于指定项之间的分隔符,可以是一个元组。
  • default:用于自定义对象的编码函数。
  • sort_keys:如果为True,则按键的字母顺序排序输出。
  • **kw:其他关键字参数。

这些参数的详细说明:

  • obj参数:需要转换的Python对象,可以是字典、列表、元组等可序列化的对象。
  • fp参数:文件对象,用于写入JSON格式的字符串,可以是打开的文件对象或者支持文件操作的对象。
  • skipkeys参数:如果为True,则会跳过不能被JSON序列化的键值对,默认为False。
  • ensure_ascii参数:如果为True(默认值),则所有非ASCII字符都将被转义为\uXXXX序列;如果为False,则保留原样。
  • check_circular参数:如果为True(默认值),则检查循环引用;如果为False,则不检查。
  • allow_nan参数:如果为True(默认值),则可以序列化NaN, Infinity和-Infinity;如果为False,则会抛出ValueError错误。
  • cls参数:用于自定义JSON编码器的类。如果指定了该参数,则json模块将使用指定的编码器类来编码Python对象,默认为None。
  • indent参数:用于控制缩进的空白字符串,可以是整数或字符串。如果是整数,则表示缩进的空格数;如果是字符串,则表示缩进的字符,默认为None,表示不缩进。
  • separators参数:用于指定项之间的分隔符,可以是一个元组。该元组包含两个字符串,第一个字符串表示项之间的分隔符,第二个字符串表示键值对之间的分隔符,默认为(',', '

    标签:自定义,Python,JSON,json,参数,字符串,import
    From: https://www.cnblogs.com/zhangxuegold/p/17497618.html

相关文章

  • 数据分享|PYTHON用决策树分类预测糖尿病和可视化实例|附代码数据
    全文下载链接:http://tecdat.cn/?p=23848最近我们被客户要求撰写关于决策树的研究报告,包括一些图形和统计输出。在本文中,决策树是对例子进行分类的一种简单表示。它是一种有监督的机器学习技术,数据根据某个参数被连续分割。决策树分析可以帮助解决分类和回归问题决策树算法将数......
  • 蔬菜识别系统Python+TensorFlow+Django+卷积神经网络算法
    一、介绍蔬菜识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。二、效果图片三、演示视频+代码视频+完整......
  • 鸟类识别系统Python+Django+TensorFlow+卷积神经网络算法【完整代码】
    一、介绍鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。数据集选自加州理工学院200种鸟类数据集二、......
  • 蔬菜识别系统Python+TensorFlow+Django+卷积神经网络算法
    一、介绍蔬菜识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。二、效果图片三、演示视频+代码视频+完整代码:http......
  • 手写数字识别系统Python+CNN卷积神经网络算法【完整代码】
    一、介绍手写数字识别系统,使用Python语言,基于TensorFlow搭建CNN卷积神经网络算法对数据集进行训练,最后得到模型,并基于FLask搭建网页端界面,基于Pyqt5搭建桌面端可视化界面。二、效果展示三、演示视频+完整代码视频+代码:https://www.yuque.com/ziwu/yygu3z/tb1mzqi847daqkru......
  • 探索Python的反射与内省:代码的自我察觉
    Python中的反射与内省允许代码察觉和修改它自己。反射指的是程序在运行时可以访问、检测和修改它自己的结构或行为的一种能力。而内省则更侧重于查看对象的类型和属性,比如查看一个对象是否有某个属性或方法,以及查看对象的文档字符串等。本文将深入探讨Python的反射与内省能力。一......
  • Python time 模块简述
    time简介time是Python处理时间的标准库,其提供了三种时间表达形式时间戳结构化时间对象格式化时间字符串时间戳获取当前时间戳,计算内部时间,以浮点数形式返回importtimeprint(time.time())#1685243267.1221318结构化时间对象time.gmtime()将纪元以来以秒为为......
  • python写的一个脚本,在电脑运行。可以实现 手机端在线通过url观看电视
    python脚本,需要安装pipinstallflashpipinstallflash_restful fromflaskimportFlask,send_from_directoryfromflask_restfulimportApi,Resourceapp=Flask(__name__)api=Api(app)classTVSeriesResource(Resource):defget(self,episode):......
  • 【python基础】类
    类是Python重要的知识点,现将学习目录整理如下:1.类-初识类2.类-类属性3.类-继承4.类-模块......
  • 【python基础】类-模块
    随着不断给类添加功能,文件可能变得很长,即便妥善地使用了继承亦是如此,为遵循Python的总体理念,应让文件尽可能简洁。为在这方面提供帮助,Python允许将类存储在模块中,然后在主程序中导入所需的模块。1.导入单个类新建一个Animal类的模块,其中只包含Animal类,编写程序如下所示:在主程......