系列
JSON简明教程
JSON学习的误区
我们先来回顾一下,JSON的全名是JavaScript Object Notation(JavaScript对象表示法),跟JavaScript有关,这就很容易带来一些误解:
- JSON就是JavaScript对象
- JSON在JavaScript里序列化、反序列化是不花时间的
我们来逐个分析一下。
误解1: JSON就是JavaScript对象
网上经常可以看到一些流行的网站,在介绍JSON的时候,就给大家来这么一段程序例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>xx教程</title>
</head>
<body>
<h2>JavaScript 创建 JSON 对象</h2>
<script>
var JSONObject = {
"name": "xx教程",
"url": "www.xx.com",
"slogan": "学的不仅是技术,更是梦想!"
};
document.getElementById("jname").innerHTML = JSONObject.name
document.getElementById("jurl").innerHTML = JSONObject.url
document.getElementById("jslogan").innerHTML = JSONObject.slogan
</script>
</body>
</html>
里面直接创建一个JavaScript对象,命名成JSONObject,然后对这个对象做一堆属性访问操作。这是明确在告诉学习者:JavaScript对象,就是JSON对象,不是吗?
这是一个严重的理解错误。前面说过,JSON是一种轻量级的数据交换格式 ,不是某个编程语言里的对象。如果是JavaScript对象,对象是程序运行时才会创建的,那么别的语言如Python、Go语言怎么拿到这个对象呢?理解这个,核心是要理解JSON是一种数据格式,本质上只是一些字符内容,和XML一样,都是文本形式存在的。因为是文本内容,格式又很简单,那么不同的语言就可以很容易解析,将其转换成自己语言内部的对象。
JSON数据格式,主要是借鉴了JavaScript代码里对象的表示形式,并且从格式上两者也并不是完全兼容的。比如:
- 对象的属性名,JSON里必须用双引号
" "
;JavaScript里,只要符合变量规范,可以用也可以不用单引号' '
或双引号'' "
- 字符串,也必须用双引号
" "
;JavaScript里,可以用单引号' '
或双引号'' "
还有一些其他的区别,具体请看JavaScript 与 JSON 的区别。
因此,JSON和JavaScript里面的Object是完全不同的,不要混为一谈。
误解2:JSON在JavaScript里序列化、反序列化是不花时间的
之所以会误解,本质原因还是把JSON直接理解为JavaScript对象,那么其实根本不需要序列化、反序列化的,所以就不会花时间。上面的误解澄清了之后,那么就比较好理解这个问题了。
既然JSON是一种文本格式,那么任何文本读到JavaScript里也只是一个字符串,具体是什么内容的,还是需要合适的解析方式来处理。
比如JavaScript里提供了JSON.stringify()
来把JavaScript对象转成JSON格式,和JSON.parse()
来把JSON转成JavaScript对象。
const obj = {
"name": "Joy",
"age": 20,
"married": false
};
const jsonData = JSON.stringify(obj);
console.log(`JSON数据:${jsonData}`);
const newObj = JSON.parse(jsonData);
console.log(`JS对象:${newObj}`);