JSON和XML学习笔记

JSON

JSON全称JavaScript Object Notation,即JS 对象标记法,JSON不仅限于使用在JS中,是现代开发最广泛使用的数据交换格式。

json是一种轻量级的纯文本数据交换格式。

"轻量级"是指JSON表示数据所需的额外开销较少,数据传输效率更高。比如JSON通过规定字符集(unicode)、默认字符编码(utf-8)和解析嗅探(因为第一个字符是{[,可以嗅探编码)等方式,相比xml来说不需要头部声明。除此之外,JSON键值对方式表示数据,相对xml需要闭合标签,内容更简洁。实际上,JSON 的语法比 XML 简洁得多------没有闭合标签、没有命名空间、没有头部声明,因此相同数据用 JSON 表示体积更小,传输更快。

"纯文本"是指JSON本质是字符串。本质来讲,JSON字符串与xml、markdown等文本文件相似,都是纯文本字符串。

"数据交换"是指json最常用于网络数据传输,比如web、api等。

"格式"是指json也是一种文件格式,.json用来表示json文本文件,以便操作系统或者应用程序解析。

json格式有两种:

  • {}大括号包裹的键值对,表示一个对象。键必须用双引号""包裹(不能用单引号),值可以是字符串(双引号""包裹)、数字(整数或小数)、布尔值(truefalse)、对象、数组、null。键值对之间用逗号,隔开,最后一个键值对后不需要写逗号。
json 复制代码
{
	"name": "hello",
	"score": 91.5,
	"football_player": true,
	"score_detail": {
		"English": 92,
		"Math": 91
	},
	"hobbit": ["football", "ice_ball"],
	"girl_friend": null
}
  • []中括号包裹的数组,格式要求与上述相同。
json 复制代码
[
	"football",
	"ice_ball",
	{
		"name": "qiangzi",
		"age": 32
	}
]

很多人会将JS对象和JSON搞混。首先,JS对象是JS语言的一种引用数据格式,虽然也是以键值对方式表示,但是键是对象的属性,一般是用命名变量规则的标志符。而JSON字符串中的键必须是由双引号""包裹。

html 复制代码
...
<script>  
  // 定义一个变量,数据类型为对象  
  var obj = {  
    name: "张三",  
    age: 18,  
    sex: "男"  
  };  
</script>
...
json 复制代码
{
	"name": "张三",
	"age": 18,
	"sex": "男"
}

其次,JS对象本质是在内存的特殊变量,而JSON字符串本质是文本字符串。只不过,JSON字符串可以解析为JS对象和数组,而JS对象也可以生成JSON字符串进行数据传输与数据持久化。JS提供JSON库进行JSON的解析与生成。

  • JS对象生成JSON字符串,使用JSON.stringify()方法进行生成。
html 复制代码
...
<script>  
  // 定义一个变量,数据类型为对象  
  var obj = {  
    name: "张三",  
    age: 18,  
    sex: "男"  
  };  
  
  // 生成JSON字符串  
  var jsonStr = JSON.stringify(obj)  
  
  console.log(jsonStr);  
</script>
...
console 复制代码
{"name":"张三","age":18,"sex":"男"}
  • JSON字符串,使用JSON.parse()方法解析成JS对象或数组。
html 复制代码
...
<script>  
  // 解析一个JSON字符串为对象  
  var jsonStr = '{"name":"张三","age":18,"sex":"男"}';  
  var obj = JSON.parse(jsonStr);  
  console.log(obj);  
  
  // 解析一个JSON字符串为数组  
  var jsonStr2 = '[{"name":"张三","age":18,"sex":"男"},{"name":"李四","age":19,"sex":"男"}]';  
  var arr = JSON.parse(jsonStr2);  
  console.log(arr);  
</script>
...

JSON的缺点在于,不能编写注释,如果要写注释,必须要引入新的字段用于注释。

XML

XML全称为eXtensible Markup Language ,可扩展标记语言。XML与HTML相似,都是标记语言,通过标签包裹内容定义元素。

XML具有以下特点:

  1. 如果有头部声明,必须在第一行,头部声明XML的版本和文本编码。xml的解析器会用ASCII码解析头部声明,再根据解析的文本字符编码,对应解析后续的内容。虽然,XML规范中声明是可选的 ,但如果出现,必须放在文档的最开头(前面不能有任何字符,包括空格)
xml 复制代码
<?xml version="1.0" encoding="utf-8" ?>  
<!-- 以上为头部声明 -->
  1. 只能有一个根标签。即头部声明之后,由一个根标签包裹所有的其他标签元素。
  2. 可自定义标签,只需要标签成对出现并闭合。HTML的标签一般是标准预定义的,比如p标签(H5版本也支持自定义标签)。而XML可以自定义标签。并且XML的标签都是成对出现,而不像HTML有单标签。
  3. 可以自定义标签属性。
  4. 特殊字符使用特殊字符串。在XML中,有5个预定义的字符实体,用于表示在XML语法中具有特殊意义的字符。当在XML文档的文本内容或属性值中使用这些字符时,必须用对应的实体引用来替代,否则XML解析器会将其误认为是代码语法。比如小于符号<需要使用&lt;进行替代,因为它是XML标签的开始标记。如果出现在文本中,解析器会认为它是一个新标签的开始。
xml 复制代码
<?xml version="1.0" encoding="utf-8" ?>  
<!-- 以上为头部声明 -->  
<!--定义一个根标签,只能由一个-->  
<users>  
    <user id="1">  
        <name>张三</name>  
        <age>18</age>  
    </user>    
    <user id="2">  
        <name>李四</name>  
        <age>&lt;20</age>  
        <!--使用特殊符号&lt;代表小于符号-->  
    </user>  
    <user id="3">  
        <name>王五</name>  
        <age>22</age>  
    </user>
</users>

XML可以很方便的表示数据和数据的层次结构,与HTML相似,容易被计算机解析和生成,同时也易于人阅读和编写。因此,XML广泛应用于系统配置文件和数据传输。但由于XML相对于JSON来说,不够轻量化,因此在网络数据传输领域,XML已被JSON广泛取代。

相关推荐
我命由我123452 小时前
Photoshop - Photoshop 工具栏(70)以快速蒙版/标准模式编辑
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
蒸蒸yyyyzwd2 小时前
后端学习笔记计网
笔记·学习
red_redemption2 小时前
自由学习记录(120)
学习
{Hello World}3 小时前
MySQL学习----------相关库表操作
数据库·学习·mysql
啊阿狸不会拉杆3 小时前
《计算机视觉:模型、学习和推理》第 6 章-视觉学习和推理
人工智能·学习·算法·机器学习·计算机视觉·生成模型·判别模型
古译汉书3 小时前
【IoT死磕系列】Day 3:学习HTTP!实战:STM32手写GET请求获取天气实战(附源码+八股文)
数据结构·stm32·物联网·网络协议·学习·算法·http
喜欢吃燃面3 小时前
基础算法:枚举(上)
c++·学习·算法
石去皿3 小时前
小样本提示学习全指南:从 Zero-shot 到 Few-shot-LtM 的核心策略解析
学习
今天你TLE了吗3 小时前
JVM学习笔记:第四章——虚拟机栈
java·jvm·笔记·后端·学习