深入了解JSON:Python中JSON的全面应用指南

news2025/1/21 15:34:04

JSON(JavaScript Object Notation)是一种广泛使用的数据交换格式,以其轻量级和易于阅读及解析的特性而备受欢迎。JSON起源于JavaScript,但已经被许多编程语言广泛支持,包括Python。本教程将深入探讨JSON的构造、数据类型,以及在Python中的多种操作方式。

JSON的基础构造

JSON由两种主要结构组成:对象(Object)和数组(Array)。

对象(Object)

定义

JSON对象是由花括号 {} 包围的键值对集合。每个键值对由一个键(Key)和相应的值(Value)组成,键必须是字符串,并用双引号括起。

示例
 
{
    "name": "Alice",
    "age": 30,
    "city": "New York",
    "isStudent": false,
    "skills": ["Python", "Java", "C++"]
}

在上述示例中,nameagecityisStudentskills 都是对象的键,而相应的值则可以是字符串、数字、布尔值、数组或对象。

数组(Array)

定义

JSON数组是由中括号 [] 包围的值的有序集合,这些值可以是任何JSON类型(字符串、数字、布尔值、对象或数组)。

示例
 
[
    "apple",
    "banana",
    "cherry",
    {
        "name": "Alice",
        "age": 30
    },
    [1, 2, 3, 4, 5]
]

在此示例中,数组包含字符串、一个对象,以及另一个数组。

嵌套结构

JSON允许对象和数组互相嵌套,构成复杂的数据结构。这种嵌套特性使得JSON能够表达复杂的数据关系。

示例
 
{
    "name": "Bob",
    "children": [
        {
            "name": "Alice",
            "age": 10
        },
        {
            "name": "Charlie",
            "age": 7
        }
    ],
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA"
    }
}

实际应用场景

JSON广泛用于Web应用中,作为客户端和服务器之间传输数据的标准格式。它的简单性和可扩展性使得它在配置文件、数据持久化和API通信中无处不在。

JSON数据类型

JSON支持以下数据类型:

  • 字符串(String):必须用双引号括起,如 "hello""world".
  • 数字(Number):可以是整数或浮点数,如 12345.67.
  • 布尔值(Boolean)true 或 false.
  • 数组(Array):值的有序集合,用中括号括起,如 [1, 2, 3].
  • 对象(Object):键值对的集合,用花括号括起,如 {"key": "value"}.
  • null:表示空值。

Python中的JSON

Python提供了内置的 json 模块来处理JSON数据。以下是该模块的一些常用操作。

json.loads()

json.loads() 用于将JSON格式的字符串解析为Python对象(如字典或列表)。

示例
 
import json

json_str = '{"name": "Alice", "age": 30, "is_student": false}'
python_obj = json.loads(json_str)

print(python_obj)  # {'name': 'Alice', 'age': 30, 'is_student': False}
print(type(python_obj))  # <class 'dict'>

在此示例中,JSON字符串被解析为Python字典,可以通过键访问相应的值。

json.dumps()

json.dumps() 用于将Python对象序列化为JSON格式的字符串。

示例
 
import json

python_obj = {'name': 'Alice', 'age': 30, 'is_student': False}
json_str = json.dumps(python_obj)

print(json_str)  # '{"name": "Alice", "age": 30, "is_student": false}'
print(type(json_str))  # <class 'str'>

json.dumps() 可以通过参数 indent 来格式化输出的JSON字符串,使其更易于阅读:

 
pretty_json_str = json.dumps(python_obj, indent=4)
print(pretty_json_str)
# {
#     "name": "Alice",
#     "age": 30,
#     "is_student": false
# }

json.load()

json.load() 用于从文件中读取并解析JSON数据到Python对象。

示例

假设有一个名为 data.json 的文件,其内容如下:

 
{
    "name": "Alice",
    "age": 30,
    "is_student": false
}

读取文件并解析其内容:

 
import json

with open('data.json', 'r', encoding='utf-8') as f:
    python_obj = json.load(f)

print(python_obj)  # {'name': 'Alice', 'age': 30, 'is_student': False}

json.dump()

json.dump() 用于将Python对象序列化为JSON格式,并写入到一个文件中。

示例

将Python对象写入到 output.json 文件:

 
import json

python_obj = {'name': 'Alice', 'age': 30, 'is_student': False}

with open('output.json', 'w', encoding='utf-8') as f:
    json.dump(python_obj, f)

注意事项

  • JSON字符串中的键和值都必须用双引号括起。
  • Python的布尔值 True 和 False 分别转换为JSON的 true 和 false
  • Python的 None 会转换为JSON的 null
  • JSON格式必须严格遵循语法规则,json.loads() 和 json.load() 会在格式错误时抛出 json.JSONDecodeError 异常。

结论

JSON作为一种通用的数据格式,因其简单和灵活性而被广泛使用。通过Python内置的 json 模块,开发者可以轻松地在Python应用中处理JSON数据,无论是从文件读取、解析字符串,还是生成并写入文件。希望本教程帮助您更深入地理解和使用JSON!如有疑问,请随时咨询。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPS数据分析000001

目录 一、表格的新建、保存、协作和分享 新建 保存 协作 二、认识WPS表格界面 三、认识WPS表格选项卡 开始选项卡 插入选项卡 页面布局选项卡 公式选项卡 数据选项卡 审阅选项卡 视图选项卡 会员专享选项卡 一、表格的新建、保存、协作和分享 新建 ctrlN------…

2025年免费量化交易软件——PTrade(含开通攻略)

量化交易软件&#xff0c;为广大投资者提供了一个便捷、高效的投资工具。 本文重点为大家介绍一款2025年好用的免费量化交易软件&#xff1a;PTrade量化&#xff0c;并详解其功能、特点、开通方法等。 一、PTrade的概念 PTrade是恒生电子开发的一款交易终端软件&#xff0c;旨…

【数据结构篇】顺序表 超详细

目录 一.顺序表的定义 1.顺序表的概念及结构 1.1线性表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 二.动态顺序表的实现 1.准备工作和注意事项 2.顺序表的基本接口&#xff1a; 2.0 创建一个顺序表 2.1 顺序表的初始化 2.2 顺序表的销毁 2.3 顺序表的打印 3.顺序…

mysql查缺补漏

auto increment&#xff1a;自增序列&#xff0c;在字段后作为约束使用 comment&#xff1a;备注信息&#xff0c;用于在创建字段后或创建表的语句最后. 数值类型&#xff1a; 字符串类型&#xff1a; 日期类型&#xff1a; desc table_name&#xff1a;查询表结构 sho…

C++ 面向对象(继承)

三、继承 3.1 继承的概念 基于一个已有的类 去重新定义一个新的类&#xff0c;这种方式我们叫做继承 关于继承的称呼 一个类B 继承来自 类 A 我们一般称呼 A类&#xff1a;父类 基类 B类: 子类 派生类 B继承自A A 派生了B 示例图的语法 class vehicle // 车类 {}class …

JAVA-IO模型的理解(BIO、NIO)

前言 &#xff08;本文是作者学习制作rpc框架时&#xff0c;一些自用的笔记&#xff0c;并不会完整详细的介绍某个模块&#xff0c;会写大概的流程及一些相关概念&#xff0c;供日后复习使用~&#xff09; IO模型 先理解基本的IO流程&#xff1a; 应用A把消息发送到 TCP发送缓…

【Spring】原型 Bean 被固定

问题描述 在定义 Bean 时&#xff0c;有时候我们会使用原型 Bean&#xff0c;例如定义如下&#xff1a; Service Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class ServiceImpl { }然后我们按照下面的方式去使用它&#xff1a; RestController public class Hello…

奉加微PHY6230兼容性:部分手机不兼容

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

Python脚本实现通过JLink烧录Hex文件

1 安装JLink驱动程序 驱动安装包下载路径&#xff1a;https://www.segger.com/downloads/jlink/ 选择对应的版本下载&#xff1a; 将下载的安装文件双击进行安装。 2 安装 pylink 包 pip install pylink3 查询 JLink 设备的 serial number 将JLink通过USB线插入电脑。 w…

【Qt】04-Lambda表达式

前言一、概念引入二、使用方法2.1 基本用法代码示例2.2 捕获外部变量2.3 参数列表 三、完整代码mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 总结 前言 一、概念引入 Lambda表达式&#xff08;Lambda Expressions&#xff09;是C11标准引入的一种匿名函数对象&…

[STM32 HAL库]串口中断编程思路

一、前言 最近在准备蓝桥杯比赛&#xff08;嵌入式赛道&#xff09;&#xff0c;研究了以下串口空闲中断DMA接收不定长的数据&#xff0c;感觉这个方法的接收效率很高&#xff0c;十分好用。方法配置都成功了&#xff0c;但是有一个点需要进行考虑&#xff0c;就是一般我们需要…

汇编与逆向(一)-汇编工具简介

RadASM是一款著名的WIN32汇编编辑器&#xff0c;支持MASM、TASM等多种汇编编译器&#xff0c;Windows界面&#xff0c;支持语法高亮&#xff0c;自带一个资源编辑器和一个调试器。 一、汇编IDE工具&#xff1a;RadASM RadASM有内置的语言包 下载地址&#xff1a;RadASM asse…

Langchain+FastApi+Vue前后端Ai对话(超详细)

一、引入 首先可以先看下作者的文章 FastApi相关文章&#xff1a;创建最简单FastApi的项目Vue相关文章&#xff1a;最简单的aixos二次封装Langchain相关文章&#xff1a;如何使用LangSmith跟踪deepseek模型 二、后端搭建 1 项目文件结构 routers&#xff1a;存放api接口se…

leetcode49-字母异位词分组

leetcode 49 思路 通过一个哈希表进行记录每个分组&#xff0c;遍历strs&#xff0c;然后对每个字符串item进行排序&#xff0c;比如&#xff1a;acb bac cab都会被排序为’abc’,然后以abc作为map的key&#xff0c;value就是存放所有匹配出来为key的值&#xff0c;最后把ma…

深度学习 DAY1:RNN 神经网络及其变体网络(LSTM、GRU)

实验介绍 RNN 网络是一种基础的多层反馈神经网络&#xff0c;该神经网络的节点定向连接成环&#xff0c;其内部状态可以展示动态时序行为。相比于前馈神经网络&#xff0c;该网络内部具有很强的记忆性&#xff0c;它可以利用它内部的记忆来处理任意时序的输入序列&#xff0c;…

跨境电商使用云手机用来做什么呢?

随着跨境电商的发展&#xff0c;越来越多的卖家开始尝试使用云手机来协助他们的业务&#xff0c;这是因为云手机具有许多优势。那么&#xff0c;具体来说&#xff0c;跨境电商使用云手机可以做哪些事情呢&#xff1f; &#xff08;一&#xff09;实现多账号登录和管理 跨境电商…

【Linux】gawk编辑器二

一、变量 gawk编程语言支持两种变量&#xff1a;内建变量和自定义变量。 1、内建变量 gawk使用内建变量来引用一些特殊的功能。 字段和记录分隔符变量 数据字段变量 此变量允许使用美元符号&#xff08;$&#xff09;和字段在记录中的位置值来引用对应的字段。要引用记录…

部署Metricbeat监测ES

官方参考文档 安装Metricbeat curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.17.27-linux-x86_64.tar.gztar xzvf metricbeat-7.17.27-linux-x86_64.tar.gz设置 Metricbeat连接到 Elasticsearch 进入metricbeat目录配置metricbeat.yml …

Linux--运维

Mysql主从同步 通过将MySQL的某一台主机&#xff08;master&#xff09;的数据复制到其他主机&#xff08;slaves&#xff09;上&#xff0c;并重新执行一遍来执行 复制过程中一台服务器充当主服务器&#xff0c;而其他一个或多个其他服务器充当从服务器 为什么要做主从复制 …

【odbc】odbc连接kerberos认证的 hive和spark thriftserver

hive odbc驱动&#xff0c;以下两种都可以 教程&#xff1a;使用 ODBC 和 PowerShell 查询 Apache HiveHive ODBC Connector 2.8.0 for Cloudera Enterprise spark thriftserver本质就是披着hiveserver的外壳的spark server 完成kerberos认证: &#xff08;1&#xff09;可以…