python 常用内置模块之 json

这篇具有很好参考价值的文章主要介绍了python 常用内置模块之 json。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

当处理 JSON 数据时,Python 中的 json 模块提供了四个主要的函数:dump、dumps、load 和 loads。这些函数提供了在 JSON 数据和 Python 对象之间进行转换和序列化的功能。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于将数据从一个应用程序传输到另一个应用程序。它基于 JavaScript 语言的一个子集,但已成为跨编程语言和平台的通用数据格式。

JSON 数据由键值对组成,类似于 Python 中的字典或 JavaScript 中的对象。它支持以下数据类型:

  • 字符串(String):表示文本数据,使用双引号括起来。
  • 数字(Number):表示整数或浮点数。
  • 布尔值(Boolean):表示真或假。
  • 数组(Array):表示有序的值列表,使用方括号括起来,值之间用逗号分隔。
  • 对象(Object):表示键值对集合,使用花括号括起来,键和值之间用冒号分隔,键值对之间用逗号分隔。

常用 API

  • **loads() **:将 JSON 字符串解析为 Python 对象。

    注意:

    • 在使用 loads 的时候 json 中的字符串必须要用双引号,否则会报错(json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 5 (char 12))
    • 入参不能为 None,否则报错
  • dumps() : 将 Python 对象转换为为 JSON 字符串

    参数:

    • obj(必需):要编码为 JSON 格式的 Python 数据结构。这可以是字典、列表、整数、字符串等等。

    • ensure_ascii(可选):默认为 True。

      • 如果将其设置为 True,则会确保生成的 JSON 字符串中的所有非 ASCII 字符都会被转义为 Unicode 转义序列(例如 \uXXXX),以便在输出时保持 ASCII 字符集。
      • 如果将其设置为 False,则非 ASCII 字符将以原始形式保留在输出中。
    • indent(可选):用于指定生成的 JSON 字符串的缩进级别。如果设置为一个整数,将在生成的 JSON 字符串中包含缩进,使其更易于阅读。

    • skipkeys(可选):默认为 False。如果将其设置为 True,则会跳过那些字典键不是基本数据类型(str, int, float, bool, NoneType)的项。如果字典中包含非基本数据类型的键,将会引发 TypeError。

    • check_circular(可选):默认为 True。

      • 如果将其设置为 True,则会检查循环引用并引发 ValueError。
      • 如果将其设置为 False,则不会检查循环引用。
    • allow_nan(可选):默认为 True。

      • 如果将其设置为 True,则允许编码浮点数值为特殊值(如 NaN 和 Infinity),这符合 JSON 规范。
      • 如果将其设置为 False,则将 NaN 和 Infinity 视为无效输入,并引发 ValueError。
    • cls(可选):用于指定自定义 JSON 编码器的类。默认为 None,表示使用标准的 JSON 编码器。

    • separators(可选):用于指定生成的 JSON 字符串中的分隔符。

      默认为 (", "": "),表示键值对之间使用逗号和冒号分隔。可以根据需要自定义分隔符。

    import json
    
    str = '''
        [{
        "name":"AnJing",
        "age":"26"
    }]
    '''
    data = json.loads(str)
    print(data)				# 输出:[{'name': 'AnJing', 'age': '26'}]
    print(type(data))		# 输出:<class 'list'>
    print(data[0].get('name'))		# 输出:AnJing
    print(data[0]['name'])  		# 通过下标进行选择
    
    str_data = json.dumps(data)
    print(type(data))			# 输出:<class 'str'>
    print(data)					# 输出:[{"name": "AnJing", "age": "26"}]
    
  • load() :从 JSON 文件中读取数据,并将其解析为 Python 对象。

    它接受一个参数:要读取的文件对象。

  • dump() :将 Python 对象转换为 JSON 数据,并将其写入文件对象中

    它接受两个参数:要序列化的对象和目标文件对象

    注意:在使用 dump 和 load 函数时,需要提供文件对象并确保文件以适当的模式打开(如 ‘w’ 用于写入,‘r’ 用于读取)

    import json
    
    str = [{
        "name":"AnJing",
        "age":"26"
    }]
    # 通过dump写入到文件中
    json.dump(str, open('123.json','w'))
    # 通过load查看是否写入
    data = json.load(open('123.json','r'))
    print(data)			# 输出:[{'name': 'AnJing', 'age': '26'}]
    

常见报错

  • 解析无效的 JSON 字符串

    如果提供的 JSON 数据无效,解析过程将引发 JSONDecodeError 异常。

    例如:

    • 缺少引号

      invalid_json = '{"name": "ZhangSan", age: 30, "city": "ShenZhen"}'
      data = json.loads(invalid_json) 
      # 引发JSONDecodeError异常。原因为JSON字符串中的age缺少双引号,导致解析失败
      
    • 不符合 JSON 语法规则(JSON 数据内字符串必须使用双引号)

  • 解析无效属性的字符串

    如果方法入参为 None 或空字符串灯,解析过程将引发 AttributeError 错误

  • 访问不存在的键

    如果尝试访问 JSON 数据中不存在的键,将引发 KeyError 异常。

    print(data['address'])  # 引发KeyError异常。原因为JSON数据中没有address键,访问该键将引发异常
    

获取对象去除为 null 的字段的 json 字符串

  • 要将一个包含基本模型的对象转换为 JSON 并去除其中的 null 字段,可以使用 Python 中的 json 模块和一个递归函数来完成这个任务。

  • 示例代码文章来源地址https://www.toymoban.com/news/detail-752041.html

    import json
    
    def remove_null(obj):
        if isinstance(obj, dict):
            return {key: remove_null(value) for key, value in obj.items() if value is not None}
        elif isinstance(obj, list):
            return [remove_null(item) for item in obj if item is not None]
        else:
            return obj
    
    # 示例对象,包含了一些 None 值
    data = {
        "name": "John",
        "age": None,
        "address": {
            "street": "123 Main St",
            "city": None,
            "zip_code": "98765"
        },
        "hobbies": ["reading", None, "swimming"]
    }
    # 使用 remove_null 函数去除 None 值
    data_without_null: dict = remove_null(data)
    # 将处理后的对象转换为 JSON 格式
    json_data = json.dumps(data_without_null)
    
    # 注意:继承自pydantic的BaseModel类的类,若有字段的类型也是BaseModel,需先转json再转dict,再传入函数
    json_data = json.dumps(remove_null(json.loads(base_model.josn())))
    

到了这里,关于python 常用内置模块之 json的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python内置模块加速SQL查询

    大家好,假设你正在查阅一本书的页面,你想要更快地找到你正在寻找的信息。那么你可能会查找术语索引,然后跳转到引用特定术语的页面,SQL中的索引与书籍中的索引工作原理类似。 在大多数实际系统中,都将对包含大量行的数据库表运行查询(想象一下数百万行),需

    2024年02月11日
    浏览(31)
  • Python常用内置函数

    Python实用教程_spiritx的博客-CSDN博客 Python 提供丰富了内置函数,这些函数的使用频率非常用,在编程过程中熟练使用内置函数可以大大减少我们的代码逻辑和代码量。 Python 解释器内置了很多函数和类型,任何时候都能使用。这些内置函数直接使用,是不需要导入库的。 - 函

    2024年02月10日
    浏览(41)
  • python-常用的内置函数

    从实现函数的角度来看,其至少需要想清楚以下 3 点: 1.函数需要几个关键的需要动态变化的数据,这些数据应该被定义成函数的 参数 。 2.函数需要传出几个重要的数据(就是调用该函数的人希望得到的数据),这些数据应该被定义成 返回值 。 3. 函数的内部实现过程 。

    2024年02月08日
    浏览(42)
  • 【Python数据分析】Python常用内置函数(一)

    🎉欢迎来到Python专栏~Python常用内置函数(一) ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: Python学习专栏 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ Python技能树:Python入门技

    2024年02月15日
    浏览(36)
  • 【Python数据分析】Python常用内置函数(二)

    🎉欢迎来到Python专栏~Python常用内置函数(二) ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: Python学习专栏 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ Python技能树:Python入门技

    2024年02月14日
    浏览(34)
  • 【Python 零基础入门】常用内置函数 再探

    Python 是一种解释性, 高级和通用的变成语言. Python 由 Guido van Rossum 创建并 1991 年首次发布. Python 的设计强调代码的可读性, 其雨大允许我们使用相较于 C++ 或 Java 更少的代码表达概念. Python 使得变成变得更简单, 更快捷. 下面就跟着小白我来一起看一下 Python 常用的内置函数.

    2024年02月04日
    浏览(32)
  • 【Python 零基础入门】常用内置函数 初探

    Python 是一种解释性, 高级和通用的变成语言. Python 由 Guido van Rossum 创建并 1991 年首次发布. Python 的设计强调代码的可读性, 其雨大允许我们使用相较于 C++ 或 Java 更少的代码表达概念. Python 使得变成变得更简单, 更快捷. 下面就跟着小白我来一起看一下 Python 常用的内置函数.

    2024年02月05日
    浏览(59)
  • 【Python数据分析】常用内置函数(一)

    🙋‍ 哈喽大家好,本次是python数据分析、挖掘与可视化专栏第四期 ⭐本期内容:常用内置函数 🏆系列专栏:Python数据分析、挖掘与可视化 👍“总有一段时光悄悄过去然后永远怀念.” 本期内容为python的常用内置函数~ 参考书籍:《Python数据分析、挖掘与可视化》 在python中

    2024年02月04日
    浏览(35)
  • 【0基础入门Python笔记】三、python 之函数以及常用内置函数

    函数是一种用于封装可重复使用代码块的工具,能够将一系列操作组织成一个逻辑单元。 函数定义 在Python中,函数通过def进行定义,后面跟着函数的名称、参数列表和冒号。函数的主体代码块缩进,并在需要时使用return返回值。 在上面的示例中,我们定义了一

    2024年02月12日
    浏览(58)
  • Python 常用内置函数详解(二):print()函数----打印输出

    print() 函数是 Python 编程最常见的函数,常用于输出程序结果,默认输出到屏幕,也可以输出到指定文件中。 语法格式: 参数说明: value:表示要输出的值,可以是数字、字符串、各种类型的变量等。 … :值列表,表示可以一次性打印多个值,输出多个值时,需要使用 \\\",\\\"

    2024年04月28日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包