Go to comments

JavaScript JSON


JSON 简单的说就是“对象”,它有很多名字

1. 对象在一定用法上叫“命名空间

2. 在另外的用法上叫对象

3. 然后在本节课这里的用法上叫“json


json 是怎么来的呢?

还要从头说一说,一开始是为了前端和后端进行数据通信,

前端和后端发数据就好比两个人交流一样,一个人说英文另一个不认识也不行,两个人达成统一说什么语言,

所以发送数据也一样,前端和后端也达成统一,数据的格式要统一。


以什么样的格式发过去,达成什么样的统一呢?

在最原始的情况下,大家达成的统一用 xml,

xml 是一种语言,以 xml 这种语言的格式来传输数据。


xml 和 html 都是脚本语言,都是以标签组成的,区别在哪呢?

最典型的区别就是 xml 比较随性,可以自定义标签,

html 不可以自定义标签,都是定义好的我们去用。


xml 可以自定义,比如定义一个 student 标签

<student>

</student>


系统定义的一些 p 标签等 xml 也有,

但 xml 可以自定义,比如定义一个 student 标签里面有 name、age

<student>
  <name>Glee</name>
  <age>37</age>
</student>


这样有什么用呢?

这样好比我们新建了一个对象,

标签名就是属性名 name、age,

里面内容就是属性值 Glee、37


过去用这种方式来传输数据,

数据名就拿标签来显示,数组值就是标签里面的内容,这么来看和对象差不多

name: Glee

age: 37


过去传输数据的格式就是 xml 的格式,导致现在数据库的基础格式也是 xml 的格式,

但是现在传输数据不用 xml 了,过去传的格式无非就是模拟对象,现在更方便直接传对象好了。


现在传数据的格式就是对象,里面有什么数据就写什么数据

obj = {
  name: "Glee",
  age: 37
}


本来它叫对象,后来应用到数据传输里面,就换了一个名叫 json,

以后传输数据的格式要满足 json 的格式,换句话说就是满足对象的格式。


对象的属性名可加双引号也可以不加双引号,

后来为了区别于对象,利用了这个语言的特性,

为了规定出一种 json 的格式,让对象的属性名强制性的必须加双引号

obj = {
  "name": "Glee",
  "age": 37
}


如果写的是 json 就必须让的属性名加双引号,

正常对象的语法加不加都行,但是放到 json 里面规定属性名,必须加双引号就叫 json 了,当然它也叫对象。


传输数据怎么传呢?

传输数据不可能把这个对象直接传过去,因为不识别,

传的是二进制的文本格式,前端传送给后端的其实是字符串,然后后端传输给我们的也是字符串

'{"name": "Glee",  "age": 37}'

只不过这个字符串是 json 格式的字符串,

然后后端拿到这个字符串的 json,会有特殊的语法,把字符串 json 解析成正常的 json。


前端怎么把 json 变成字符串的 json 呢?

有一个特殊的语法 JSON.stringify()

JSON 是一个静态类,类似于 Math

虽然 JSON 是一个构造函数,但是不用构造它,它身上就有很多函数,其中有一个 stringify() 函数,


比如,把数据 obj 传输给后台,JSON.stringify( obj ) 会返回一个字符串

obj = { 
  name: "Glee",
  age: 37
}

console.log(JSON.stringify(obj)); // '{"name":"Glee","age":37}'


把 json 形式变成字符串形式的 'json' 形式,

属性名没有加双引号,它会变加双引号的,写的时候我们最好还是加上,

字符串里面是 json 的格式,但是它是字符串类型


前端接收后端传过来的 'json' 字符串,怎么把字符串转化成 json 呢?

1. JSON 上面还有一个 parse 方法,它会把字符串解析成对象

2. 对象就可以调用它的属性名和属性值,就可以把属性值来出来用了

var str = '{"name":"Glee","age":37}';

var obj = JSON.parse(str);

console.log(obj); // {name:'Glee', age: 37}
console.log(obj.name); // Glee
console.log(obj['age']); // 37


百度后端基本的数据格式

image.png



Leave a comment 0 Comments.

Leave a Reply

换一张