JSON(JavaScript Object Notation,即JavaScript对象表示法)是一种轻量级的数据交换格式。它是基于ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。
一、JSON的构成
JavaScript(简称JS)是一种编程语言,但JSON不是,它只是一种数据格式。这种数据格式已成为“宇宙语言”,可以为任何编程语言服务。
1.对象
这种数据格式很简单,就是全部由“键值对(key-value pair)”构成,然后通过[]、{}来划分这些键值对的层次。
所谓的键值对也很好理解,老金估计是从键盘来的。键(key)就是键盘上的按键嘛,比如A,值(value)就是按键代表的值,比如A的ASCII码值是65,这和“姓别:孟姜女”,“年龄:28”是一样的。所以“键值对”就是配对,是一种映射关系,就像我们小时候做的连线题一样。C++中的map(关联容器)、python的dict(字典),都是使用“键值对”的数据结构。
孟姜女们在JSON中都被称为对象,把它们用{}括起来就成了JSON。
示例:
{
"姓别": "孟姜女",
"年龄": 28,
"技能": "哭",
"攻击对象": "长城",
"倒没": true
}
虽然结构形式确实很简单,但还是要注意几点细节:
①键必须是字符串,并且用双引号""包围;
②值可以是字符串、数字、对象、数组、布尔值(true或false)或者null,也就是什么样的值都可以。如果不是字符串,就不用双引号""包围。
③键和值之间用“:”隔开;
④键值对间用逗号隔开,最后一项后的逗号省略。
2.数组
如果把多个值用[]包起来,就变成了数组。
示例:
[
"范喜良",
"秦始皇"
]
数组的构成规则和对象差不多,只不过它只含有值,没有键。
3.对象和数组的嵌套
JSON只有两种结构:对象和数组。是不是非常简单?
前面说了,值可以是对象,所以你会看到JSON{}中有[],[]中有{},但最开始的第一个一定是{},因为一切毕对象。
示例:
{
"姓别": "孟姜女",
"年龄": 28,
"技能": "哭",
"攻击对象": "长城",
"倒没": true,
"男人": [{
"姓名": "范喜良",
"关系": "老公",
"职业": "修长成",
"生命值": 0
},{
"姓名": "秦始皇",
"关系": "仇敌",
"职业": "皇帝"
}]
}
二、JSON的编辑
JSON文件的后缀名是“.json”,常用的编辑工具:
1.Visual Studio Code(VS Code)
由微软开发的一款开源代码编辑器,提供多视图功能,包括树形结构和代码视图,方便用户查看和编辑JSON数据。
2.Sublime Text
轻量级文本编辑器,以简洁、高效、强大的特性而闻名。可通过Package Control安装JSON相关插件,扩展编辑功能。
3.JSON Editor X
看名字就知道,这是一款专门的JSON编辑器。采用Web技术开发,用户可以直接在浏览器中使用,无需安装任何插件或应用。
4.在线JSON编辑器
无需安装,在浏览器中打开即可使用。比如:
JSONLint(JSON Online Validator and Formatter - JSON Lint)
JSONCompare(https://jsoncompare.com/)
JSON格式化和验证器(JSON Formatter & Validator)
三、JSON与JavaScript的关系
JavaScript这门编程语言很有意思,据说当年开发者起这个名就是为了蹭java的流量,一不小心就蹭出万道金光,成为炙手可热的编程语言,甚至被很多人认为是最具学习性价比的编程语言。
不过,它和java一点关系都没有。
JSON与JavaScript也是两个完全独立的东西,但二者比JavaScript与java的关系还是要更近一层,因为JSON是由JavaScript对象字面量表示法演变而来的。
JSON这个简写冥冥之中暗示出了与JavaScript的真实关系:J的SON(儿子)。
四、JSON与XML的区别
JSON与XML(eXtensible Markup Language)都是用于数据交换的格式,区别如下:
1.可读性
JSON格式简洁,结构清晰,易于读写;XML相对冗长,标签多得能绕地球三圈,可读性稍逊于JSON。
2.解析速度
由于JSON结构更简单,通常比XML更快地被解析。
3.用途
JSON常用于Web开发中的API和轻量级的数据交换。特别是在前后端数据交互方面,后端可以将数据封装成JSON格式发送给前端,前端通过解析JSON数据来展示给用户或进行进一步的处理。这种数据交换方式简化了前后端的通信,提高了开发效率
XML常用于配置文件、文档存储和企业级的复杂数据交换。