JSON 格式详解

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.xdnf.cn/news/1523005.html

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

相关文章

基于yolov8的106种鲜花识别花朵检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的106种鲜花识别花朵检测系统是一项融合了先进深度学习技术的创新应用。该系统利用YOLOv8算法,这一目前最先进的目标检测模型之一,实现了对106种不同花卉的快速、准确识别。 YOLOv8以其速度快、准确性高和鲁棒性强的特点&#…

IP的SSL证书的申请及配置方式

随着互联网技术的发展,数据安全变得越来越重要。HTTPS协议因其提供的加密传输能力而成为现代Web通信的标准。实现HTTPS的关键组件之一就是SSL/TLS证书,它为网站提供了一层保护,确保客户端与服务器之间的数据传输是加密的。本文将指导您如何为…

xmos 相关知识--- xn文件解析

1.XN 文件解析 type 声明是device name 是名称 tile 资源声明 一个是XCore 一个是 usb 相关的物理层资源 package 对应芯片,包含两个Node 和一个link 两个node ,一个是xcore 一个是USB,每个node 都有一个id号,从0开始 xrun: C…

指针之旅(2)——const修饰词 野指针、空指针与泛型指针

目录 Part one(一) 1. const关键字 1.1 const修饰普通变量 1.1.1 const的作用 1.1.2 指针绕过const 1.2 const修饰指针变量 1.2.1 const在 * 前 1.2.2 const在 * 后 1.2.3 双重const修饰 Part two(二) 1. 野指针 * 野…

Sentence-BERT实现文本匹配【回归目标函数】

引言 上篇文章我们通过Sentence-Bert提出的分类目标函数来训练句子嵌入模型,本文同样基于Sentence-Bert的架构,但改用回归目标函数。 架构 如上图,计算两个句嵌入 u \pmb u u和 v \pmb v v​之间的余弦相似度,然后可以使用均方误…

Webpack详解与配置环境

webpack:webpack网址 1、工作原理: Webpack是一个非常强大的静态模块的打包工具。从文件入口开始,递归解析以来关系,然后将所有模块打包成一个或多个budle文件。 2、webpack核心概念: Entry:入口起点(en…

【STM32+HAL库】---- 通用定时器实现外部脉冲计数

硬件开发板:STM32G0B1RET6 软件平台:cubemaxkeilVScode1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置定时器 选择通用定时器TIM2,时钟源选择ETR2,对应的输入端口为PA0引脚,预分频系数为0,重装载值选择…

Python简易IDE工作界面制作

、 休闲一下,学习编程还是要学习一些界面编程,能够根据需要制作图形操作界面,这样我们开发的程序才能方便操作和使用,同时获得更友好的人机交互体验。下面是一个用PyQt5制作的简易界面,供大学参考。如下图所示&a…

在SpringMVC中用fmt标签实现国际化/多语言

SpringMVC中用fmt标签实现国际化主要解决界面的多语言化,ftm标签会根据浏览器的语言值来先择对应的文件配置,如中文简体的浏览器值是zh_CN,那么ftm标签就会用以zh_CN.properties结尾的配置文件中的key来取值,从而实现自多语言的自动切换&…

自动化运维之SaltStack 部署应用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【Steam游戏星露谷物语添加Mod步骤】

Steam游戏星露谷物语添加Mod步骤 星露谷物语添加拖拉机模组一、安装SMAPI二、正式开始添加MOD 星露谷物语添加拖拉机模组 一、安装SMAPI 星露谷物语添加拖拉机mod为例,添加其它mod一样的步骤。 首先,打开Steam,打开一次星露谷物语这款游戏&…

论文速读纪录 - 202408

特别鸣谢kimi,以下论文均在kimi辅助下阅读。 目录 RMIB: Representation Matching Information Bottleneck for Matching Text RepresentationsAttentionRank: Unsupervised keyphrase Extraction using Self and Cross AttentionsANSWERING COMPLEX OPEN-DOMAIN …

标准库标头 <optional> (C++17)学习之optional

类模板 std::optional 管理一个可选 &#xfeff;的所含值&#xff0c;即既可以存在也可以不存在的值。 一种常见的 optional 使用情况是作为可能失败的函数的返回值。与如 std::pair<T, bool> 等其他手段相比&#xff0c;optional 可以很好地处理构造开销高昂的对象&a…

DataGridView用法合集【精品】

1.当前的单元格属性取得、变更 [VB.NET] Console.WriteLine(DataGridView1.CurrentCell.Value) Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex) Console.WriteLine(DataGridView1.CurrentCell.RowIndex) DataGridView1.CurrentCell DataGridView1(0, 0) [C#] Con…

虚幻引擎VR游戏开发02 | 性能优化设置

常识&#xff1a;VR需要保持至少90 FPS的刷新率&#xff0c;以避免用户体验到延迟或晕眩感。以下是优化性能的一系列设置&#xff08;make sure the frame rate does not drop below a certain threshold&#xff09; In project setting-> &#xff08;以下十个设置都在pr…

基于php+vue+uniapp的医院预约挂号系统小程序

开发语言&#xff1a;PHP框架&#xff1a;phpuniapp数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;PhpStorm 系统展示 后台登录界面 管理员功能界面 用户管理 医生管理 科室分类管理 医生信息管理 预…

机器人外呼有哪些优势?

机器人外呼&#xff0c;作为一种结合了计算机技术和人工智能技术的自动化工具&#xff0c;具有多重显著优势。以下是其主要优势的详细阐述&#xff1a; ### 1. 高效性 * **大幅提升工作效率**&#xff1a;机器人外呼可以全天候、不间断地进行工作&#xff0c;不受时间、地点和…

【优质源码】3D多人在线游戏,前端ThreeJS,后端NodeJS

3D多人在线游戏 【源码】3D多人在线游戏源码&#xff0c;前端ThreeJS&#xff0c;后端NodeJS&#xff0c;完整源码。 游戏画面 启动方法 先启动服务器端。 在目录&#xff0c;3D-multi-player-main\3D-multi-player-main\nodeapps\blockland 中&#xff0c;运行&#xff1a…

Elasticsearch之原理详解

简介 ES是使用 Java 编写的一种开源搜索引擎&#xff0c;它在内部使用 Lucene 做索引与搜索&#xff0c;通过对 Lucene 的封装&#xff0c;隐藏了 Lucene 的复杂性&#xff0c;取而代之的提供一套简单一致的 RESTful API 然而&#xff0c;Elasticsearch 不仅仅是 Lucene&#…

设计模式及创建型模式-python版

1 架构模式与设计模式 架构模式搞层次的设计模式&#xff0c; 描述系统整体结构和组织方式&#xff0c;设计模式是针对某个问题的解决方案&#xff0c;是一种解决问题的思路。 2 设计模式的分类 2.1 创建型模式 单例模式&#xff0c;工厂方法模式&#xff0c;抽象工厂模式&…