JSON ⯐
JSON(JavaScript Object Notation)即JavaScript对象表示法,是一种轻量级的数据交换格式。JSON由Douglas Crockford在2001年开始推广使用,在2005 - 2006年正式成为主流的数据格式,当时雅虎和谷歌开始广泛使用JSON格式。
基本概念
-
定义:它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
-
本质:JSON本质上是一个字符串,是JS对象的字符串表示法,用于表示JS对象的信息。例如,
var obj = {a: 'Hello', b: 'World'};
这是一个JS对象,而var json = '{"a": "Hello", "b": "World"}';
则是对应的JSON字符串。
- 轻量级:数据格式简洁,占用存储空间小,在网络传输中能有效减少数据传输量,提升传输效率。
- 可读性好:层次结构清晰,易于人类阅读和编写。
- 语言独立性:虽然源自JavaScript,但已发展为独立于编程语言的数据格式,几乎所有主流编程语言都支持JSON,解析器和相关库丰富,便于不同系统和语言间的数据交换。
- 易于解析生成:计算机可快速解析和生成JSON数据,无需复杂处理。
- Web开发:常用于服务器和Web应用之间传输数据。例如用户在网页上操作,应用将用户输入以JSON格式发送到服务器,服务器处理后再以JSON格式返回响应,实现客户端和服务器间无缝数据交换,打造交互式Web体验。
- 配置文件:在应用或IT系统内用于存储和管理配置设置,以JSON格式编写配置文件,方便读取和修改。
- API编程:在API接口中作为数据传输格式,不同系统通过API交互时,以JSON格式传递数据,方便快捷。
- 数据存储:一些数据库(如MongoDB等NoSQL文档数据库 )以JSON格式存储数据,便于数据的存储和查询,且在数据交换时无需额外处理。
- 可读性:JSON语法简易,XML采用规范标签形式,两者可读性难分高下,但JSON在数据交换场景中,因字符使用少,相对更易阅读。
- 可扩展性:XML天生扩展性好,JSON同样具备扩展性,且在JavaScript环境中,存储JavaScript复合对象方面有优势。
- 数据表示:两者都用结构化方法标记数据,但JSON格式更简洁,占用带宽少。例如表示中国部分省市数据,JSON的层次结构更清晰,占用空间更小。
语法规则
-
构造字符:包括六个构造字符:
[
、]
、{
、}
、:
、,
。在这些构造字符前后允许存在无意义的空白符(如空格、水平标签、换行、回程等)。 -
值的类型:
JSON主要有以下6种值类型:
对象(Object):由花括号 {}
包围,是一组无序的“键值对”集合,键必须是字符串,值可以是字符串、数字、布尔值、数组、对象或 null
。不同键值对之间用逗号 ,
分隔。
数组(Array):由方括号 []
包围,是一个有序的值集合,数组中的值可以是任意JSON支持的类型,包括对象、数组、字符串、数字、布尔值或 null
,不同值之间用逗号 ,
分隔。
字符串(String):由双引号 ""
包围的任意数量Unicode字符的集合,可使用反斜线 \
进行转义。
数字(Number):不区分整型和浮点型,采用IEEE - 754双精度浮点格式表示,不能使用八进制和十六进制表示,但可以使用 e
或 E
表示10的指数。
布尔值(Boolean):只有两个值,即 true
(真)和 false
(假),表示逻辑判断的结果。
与JS对象的关系及转换
-
关系:JSON是JS对象的字符串表示形式。
-
转换方法:
- JSON字符串转JS对象:使用
JSON.parse()
方法,例如:
- JS对象转JSON字符串:使用
JSON.stringify()
方法,例如:
- JSON字符串转JS对象:使用
JSON的使用方法
-
JSON对象的创建
可以使用JavaScript的对象字面量语法来创建JSON对象
-
JSON字符串的解析
可以使用JSON.parse()方法将JSON字符串解析为JavaScript对象
-
JavaScript对象的序列化
可以使用JSON.stringify()方法将JavaScript对象序列化为JSON字符串
在Spring Boot中使用JSON可以通过Jackson库来实现。首先需要在pom.xml文件中添加Jackson依赖:
示例
然后在Controller中使用@ResponseBody注解将返回值转换为JSON格式:
示例
这样,当访问/myEndpoint时,返回的MyObject对象会被自动转换为JSON格式。
Jackson库是一个用于Java语言的JSON处理库,它提供了一系列的API来解析、生成和操作JSON数据。下面是一个简单的使用示例:
-
导入Jackson库的依赖:
-
创建一个Java对象,并将其转换为JSON字符串:
示例
-
将JSON字符串转换为Java对象:
除了上述示例中的基本用法外,Jackson库还提供了许多高级功能,例如处理日期、枚举、多态等。具体使用方法可以参考官方文档。