JSON 格式详解

随着互联网的发展和各种 Web 应用程序的普及,数据交换已经成为了我们日常开发中的重要环节。而在各种数据交换格式中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易于阅读和解析的特性,得到了广泛应用。本文将对 JSON 格式进行详细介绍,帮助大家更好地理解和使用它。

一、什么是 JSON?

JSON 是一种基于文本的数据交换格式,源于 JavaScript 语言,但其设计目的是独立于语言的。目前,几乎所有主流编程语言都支持 JSON,常用于数据存储和网络传输。

以下是B站尚硅谷javaweb课程老师的图解:
在这里插入图片描述
(原课程视频链接:尚硅谷Javaweb教程)

JSON 的结构由两种基本数据结构组成:对象(object)和数组(array)。对象是键值对的集合,而数组是有序的值集合。

二、JSON 的基本语法
1. 对象(Object)

对象表示为花括号 {} 包围的内容,内部是多个键值对的集合。键(key)是字符串,值(value)可以是任意合法的 JSON 数据类型。键值对之间使用逗号 , 分隔,键和值之间使用冒号 : 分隔。

{"name": "Alice","age": 25,"isStudent": false
}
2. 数组(Array)

数组表示为方括号 [] 包围的内容,内部是按顺序排列的多个值。数组中的值可以是任意合法的 JSON 数据类型,不需要相同类型。

["Apple","Banana","Cherry"
]
3. 键值对(Key-Value Pair)

键值对由键和值组成,键必须是字符串,值可以是任意类型。注意键要用双引号括起来。

{"key": "value"
}
4. 数据类型

JSON 支持以下几种数据类型:

  • 字符串(String):由双引号括起来的字符序列,如 "Hello World"
  • 数字(Number):包括整数和浮点数,如 423.14
  • 布尔值(Boolean):即 truefalse
  • 数组(Array):值的有序集合,如 [1, 2, 3]
  • 对象(Object):键值对的无序集合,如 {"key": "value"}
  • 空值(null):表示空数据,即 null
三、JSON 的优点
  1. 轻量级:相比 XML 等格式,JSON 更加简洁,减少了数据传输量。
  2. 易于阅读和书写:其结构简单,符合大多数开发者的习惯,便于阅读和手动书写。
  3. 解析效率高:JSON 的解析速度非常快,特别适合在浏览器和服务器之间进行数据交互。
  4. 良好的语言支持:几乎所有的编程语言都提供了对 JSON 的良好支持,方便开发者在不同的技术栈中使用。
四、JSON 的常见应用场景
  1. Web API 数据传输:JSON 常用于 RESTful API 的请求和响应格式,用于前后端之间的数据传输。
  2. 配置文件:JSON 格式常用作配置文件,简单明了,易于修改和解析。
  3. 数据存储:一些 NoSQL 数据库(如 MongoDB)使用 JSON 或类似 JSON 的格式来存储数据。
  4. 跨平台数据交换:JSON 可以用于不同平台、不同编程语言之间的数据交换,确保数据的一致性和兼容性。
五、如何解析 JSON?

由于 JSON 格式广泛支持,几乎所有主流编程语言都内置了 JSON 的解析库。以 JavaScript 和 Python 为例,简单介绍如何解析 JSON 数据。

1. JavaScript

在 JavaScript 中,可以使用 JSON.parse() 方法将 JSON 字符串解析为 JavaScript 对象,使用 JSON.stringify() 方法将 JavaScript 对象转换为 JSON 字符串。

let jsonString = '{"name": "Alice", "age": 25}';
let obj = JSON.parse(jsonString);
console.log(obj.name);  // 输出: Alicelet jsonStr = JSON.stringify(obj);
console.log(jsonStr);  // 输出: {"name":"Alice","age":25}
2. Python

在 Python 中,可以使用 json 模块中的 loads() 方法将 JSON 字符串解析为 Python 字典,使用 dumps() 方法将 Python 字典转换为 JSON 字符串。

import jsonjson_string = '{"name": "Alice", "age": 25}'
obj = json.loads(json_string)
print(obj['name'])  # 输出: Alicejson_str = json.dumps(obj)
print(json_str)  # 输出: {"name": "Alice", "age": 25}
六、JSON 与 XML 的对比

虽然 JSON 与 XML 都是常见的数据交换格式,但它们各有优劣。

  • 简洁性:JSON 更加简洁,数据结构的表示直观且紧凑,而 XML 则需要冗长的标签。
  • 可读性:JSON 更易于阅读,尤其是对于熟悉 JavaScript 语法的开发者。XML 标签则可能显得过于复杂。
  • 解析效率:JSON 的解析通常比 XML 更快,特别是在 Web 环境中。

不过,XML 也有其独特的优势,例如更好的描述性和更丰富的数据验证机制(如 DTD、XSD)。因此,选择哪种格式取决于具体应用场景。

七、注意事项
  1. 避免循环引用:JSON 不支持对象的循环引用,在转换带有循环引用的对象时会抛出错误。
  2. 大小写敏感:JSON 的键名是大小写敏感的,在使用时要特别注意。
  3. 安全性问题:在解析外部提供的 JSON 数据时,必须小心避免潜在的安全问题,防止恶意数据导致代码执行错误或安全漏洞。
八、总结

JSON 作为一种轻量级的数据交换格式,凭借其简洁、易于解析等特点,已经成为了 Web 开发中的事实标准。无论是数据传输、配置文件还是跨平台数据交换,JSON 都有着广泛的应用场景。掌握 JSON 的使用,能够大大提高我们的开发效率,提升应用的灵活性与兼容性。

希望本文能帮助大家更好地理解 JSON 格式,在实际开发中灵活运用这一强大的工具。如果你有任何问题或建议,欢迎在评论区留言讨论!


谢谢观看!如果觉得文章对你有所帮助的话,可以点点赞,加个关注哦~

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原型设计Axure RP网盘资源下载与安装教程共享

对于初学者来说,我们熟悉一下其定义:‌Axure RP是一款常用的快速原型设计工具‌,主要用于创建应用软件或Web网站的线框图、流程图、原型和规格说明文档,广泛应用于产品经理、UI/UX设计师等专业领域。‌‌ 主要用户群体&#xff1…

iframe嵌套 redirect中转页面 route跳转

需求是项目A要使用iframe内嵌项目B的页面, 由于需要嵌套的页面很多,每个页面路径和参数又各不相同, 所以我们在项目B里做了一个中转页面,这样就能自己掌控项目A传递过来的东西了; routes.js 增加一个菜单:…

IP数据报 封装成 MAC帧 ( 目的MAC地址6B 源MAC地址6B 类型2B 数据部分 FCS校验和4B )

将 IP 数据报(Internet Protocol Datagram)封装成 MAC 帧 需要在数据链路层添加适当的头部信息,以便在局域网内进行传输。这个过程涉及将网络层(IP 层)的数据通过数据链路层(MAC 层)封装成适合物…

Note2.4 机器学习:Batch Normalization Introduction

Batch Normalization(批标准化,BN)通过标准化数据的操作,使得损失函数的优化地形(optimization landscape)更加平滑,从而达到更好地训练效果。BN常用于卷积神经网络(CNN)…

IDEA在AI时代的智能编程实践:从工蜂到通义灵码的效能跃迁‌‌

引言‌ 在腾讯云工作期间,我曾使用‌工蜂的AI代码补全功能,结合IntelliJ IDEA(以下简称IDEA)极大提升了开发效率。如今离开腾讯云,面对外部开发环境,如何继续利用AI提升编码效率?本文将系统梳理…

MySQL 慢查询日志详解

慢查询日志(Slow Query Log)是 MySQL 提供的一种核心性能优化工具,用于记录执行时间超过指定阈值的 SQL 语句。通过分析这些日志,可以定位数据库性能瓶颈,优化低效查询,提升系统整体效率。 一、慢查询日志的…

UV安装Python指南总结

UV安装Python指南总结 UV是一个Python包管理工具,它可以帮助我们安装和管理Python版本。以下是关于UV安装Python的主要功能和用法总结。 基本使用 安装最新版Python uv python install注意:UV使用Astral的python-build-standalone项目提供的Python发行版,而不是…

运维基础-MYSQL数据库-笔记

序 欠10年前自己的一份笔记,献给今后的自己。 数据库介绍 数据的时代 涉及的数据量大数据不随程序的结束而消失数据被多个应用程序共享大数据 数据库的发展史 萌芽阶段:文件系统 使用磁盘文件来存储数据初级阶段:第一代数据库 出现了网状…

从GPTs到Real智能体:目前常见的几种创建智能体方式

文章目录 智能体的三个发展阶段低阶智能体(面向过程) VS 高阶智能体(面向目标)主流智能体创建平台实践基础型平台cherry-studio豆包讯飞星火腾讯元器 高阶智能体开发体系cline开发套件Coze平台Dify开源框架Manus突破性方案 技术演进趋势总结 智能体的三个发展阶段 当前智能体技…

WPF 实现自定义数字输入弹窗

1.前端代码实现 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品识别系统flask

查看完整项目包点击文末名片 项目简介 本项目 基于YOLO的海洋垃圾物品识别系统 旨在利用深度学习中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;实现对海洋垃圾的自动识别与分类。通过构建一个基于Flask的Web应用&#xff0c;用户可以方便地上传图片&…

从数据到决策:UI前端如何利用数字孪生技术提升管理效率?

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;企业管理者正面临数据过载与决策滞后的双重挑战 ——IDC 研…

Spring Boot高并发 锁的使用方法

Spring Boot高并发 锁的使用方法 在高并发场景中&#xff08;比如电商秒杀、抢票系统、转账交易&#xff09;&#xff0c;多个线程/用户会同时操作同一共享资源&#xff08;如库存、账户余额、订单号&#xff09;。如果不做控制&#xff0c;会导致数据错误&#xff08;如库存超…

二十九:Dynamic Prompts插件动态提示词讲解

引言:可变化提示词,随机抽取不固定 使用方式一:{提示词1|提示词2|。。。。}------从提示词种随机抽取生成 方式二:{25::提示词1|75::提示词2}------数字为每个提示词的占比,相当于权重 方式三:{2$$提示词1|提示词2|提示词3|提示词4|。。。}从中选区2个搭配生成(可以换 比…

vscode 改注释的颜色,默认是灰色的,想改成红色

修改VScode编辑器默认注释的颜色_databricks代码中怎么设置让注释是灰色的-CSDN博客 //改变注释颜色"editor.tokenColorCustomizations": {"comments": "#009933" // 注释}, //如果后面还加内容&#xff0c;记得块末用逗号隔开我自己用的vscdoe.…

chili3d笔记22 正交投影3d重建笔记3 面构建

双视图重建3d solid import { FaceNode } from "chili"; import {IDocument,IEdge,Logger,ShapeNode,XYZ } from "chili-core"; import { Graph } from "graphlib"; function pointToString(point: XYZ): string {return ${point.x.toFixed(0)}-…

Kotlin 协程使用与通信

一、协程基础使用 1. 协程的三种创建方式 (1) launch - 启动后台作业 val job CoroutineScope(Dispatchers.IO).launch {// 后台操作delay(1000)println("任务完成 ${Thread.currentThread().name}")// 输出&#xff1a;任务完成 DefaultDispatcher-worker-1 } j…

Ubuntu服务器(公网)- Ubuntu客户端(内网)的FRP内网穿透配置教程

以下是为Ubuntu服务器&#xff08;公网&#xff09;- Ubuntu客户端&#xff08;内网&#xff09;的FRP内网穿透配置教程&#xff0c;基于最新版本&#xff08;2025年6月&#xff0c;使用frp_0.61.1_linux_amd64&#xff09;整理&#xff1a; 一、服务端配置&#xff08;公网Ubu…

什么是哈希函数(SHA-256)

SHA-256 是区块链系统中最核心的加密基础之一&#xff0c;尤其是在比特币、以太坊、文件存证等场景中扮演“指纹识别器”的角色。下面是对它的详细讲解&#xff0c;包括原理、特点、用途和代码示例。 &#x1f4cc; 一、什么是 SHA-256&#xff1f; SHA-256 是一种密码学哈希函…

大模型的“Tomcat”:一文读懂AI推理引擎(Inference Engine)

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…