发表于: 2017-04-19 20:20:58

1 1382


小课堂【武汉第137期】

JSON是什么,如何处理转义?

                                                  分享人:叶紫阳


1.背景介绍

数据传输是我们在编写代码时经常遇到的一个场景。给数据一个统一的格式有利于我们编写和解析数据。

json,是数据格式的一种,在其与后端的数据交换中有较为广泛的应用。

2.知识剖析

2.1 什么是JSON

JSON是一种格式,基于文本,优于轻量,用于交换数据。

一种数据格式

基于文本的数据格式

轻量级的数据格式

被广泛地用于数据交换


2.1.1一种数据格式

姓名二百六,身高“4000px”,体重“60kg”

name="二百六"&height="4000px"&weight="60kg"

<person><name>二百六</name><height>160</height><weight>60</weight></person>

{"name":"二百六","height":160,"weight":60}


2.1.2基于文本的数据格式

JSON是基于文本的数据格式,相对于基于二进制的数据,所以JSON在传递的时候是传递符合JSON这种格式的字符串,而不是一个对象。


2.1.3轻量级的数据格式

JSON之前,有一个数据格式叫xml,现在还是广泛在用,但是JSON更加轻量,如xml需要用到很多标签,像上面的例子中,你可以明显看到xml格式的数据中标签本身占据了很多空间,而JSON比较轻量,即相同数据,以JSON的格式占据的带宽更小,这在有大量数据请求和传递的情况下是有明显优势的。


2.1.4被广泛地用于数据交换

轻量已经是一个用于数据交换的优势了,但更重要的JSON是易于阅读、编写和机器解析的,即这个JSON对人和机器都是友好的,而且又轻,独立于语言(因为是基于文本的),所以JSON被广泛用于数据交换。
以前端JS进行ajaxPOST请求为例,后端PHP处理请求为例:

前端构造一个JS对象,用于包装要传递的数据,然后将JS对象转化为JSON字符串,再发送请求到后端;

后端PHP接收到这个JSON字符串,将JSON字符串转化为PHP对象,然后处理请求。


2.2 JS中的JSON函数

JSON.stringify:JS数据结构转化为符合JSON格式的对象,再将该对象转化为字符串。

JSON.parse:JSON字符串解析为JS数据结构。


3.常见问题

1. 什么是json

2. 什么是JSON对象?

3.  json对象和js对象有什么区别?

4. 什么是json格式?


4.解决方案

什么是JSON

json指的就是一种格式,一种数据交换的格式,"JSON"全名"JavaScript Object Notation",所以它的格式(语法)是基于JS的,但它就是一种格式,而JS对象是一个实例,是存在于内存的一个东西。
说句玩笑话,如果JSON是基于PHP的,可能就叫PON了,形式可能就是这样的了['propertyOne' => 'foo', 'propertyTwo' => 42,],如果这样,那么JSON可能现在是和PHP比较密切了。


什么是JSON对象?

JSON对象实际上是指js内置的一个静态对象,有2个方法,分别用于JSON字符串和JS数据结构之间的转化。

但是对于一个符合json格式的js对象,我们有时候也会简称为json对象,实际上这种叫法不对容易造成误解,只有js对象,或者json格式,没有所谓的json对象这种说法(除非是特指JSON这个原生的静态对象),只有符合json格式的js对象这一说法。


JSON格式与JS对象语法的区别?

没有json对象,只有符合json格式的对象,所以问题应该换成普通的对象和json格式的对象有什么区别?

对比内容

JSON

JS对象

键名

必须是加双引号

可允许不加、加单引号、加双引号

属性值

只能是数值(10进制)、字符串(双引号)、布尔值和null
 
也可以是数组或者符合JSON要求的对象,
 
不能是函数、NaN, Infinity, -Infinityundefined

爱啥啥

逗号问题

最后一个属性后面不能有逗号

可以

数值

前导0不能用,小数点后必须有数字

没限制


什么是JSON格式?

数据以键值对的形式存储,和对象的格式有点像

                             

var person={name:"哈士奇"};
//一个普通的js对象
var obj2 = {"width":100,"height":200,"name":"rose"};
// 可把这个称做:JSON 格式的 JavaScript 对象

var str1 = '{"width":100,"height":200,"name":"rose"}';
// 可把这个称做:JSON 格式的字符串

var arr = [
{"width":100,"height":200,"name":"rose"},
{"width":100,"height":200,"name":"rose"},
{"width":100,"height":200,"name":"rose"},
];
// 这个可叫JSON格式的数组,是JSON的稍复杂一点的形式

var str2='['+
'{"width":100,"height":200,"name":"rose"},'+
'{"width":100,"height":200,"name":"rose"},'+
'{"width":100,"height":200,"name":"rose"},'+
']';
// 这个可叫稍复杂一点的 JSON 格式的字符串                    

5.扩展思考

JSON.STRINGIFY方法的第二个参数

JSON.stringify方法的第二个参数可以是数组。也可以是方法。

如果第二个参数是一个函数,那么序列化过程中的每个属性都会被这个函数转化和处理

如果第二个参数是一个数组,那么只有包含在这个数组中的属性才会被序列化到最终的JSON字符串中


6.参考文献

参考文献:JSON:如果你愿意一层一层剥开我的心,你会发现...这里水很深——深入理解JSON

7.更多

JSONXML作为数据传输的格式分别有什么优缺点?


ppt:

https://ptteng.github.io/PPT/PPT/js-05-jsonAndEscape.html#/

视频:

https://v.qq.com/x/page/y0395md3r4s.html




 



返回列表 返回列表
评论

    分享到