你真的了解JSON吗?

469 阅读5分钟

你真的了解json吗?

诞生背景:

曾有一段时间 xml是互联网上传输数据结构的事实标准,但是由于xml过于繁琐。冗长。由此在2001年左右诞生了json,并于在2006年提交给了IRTF。

关于json,要理解他是一种是数据格式,而不是一种编程语言。虽然json数据格式和js中对象很相似,但是却不属于js。而且,并不只是js才使用json,很多变成语言都有针对json的解析器和序列化器。

JSON语法可以表示三种类型的值: 1.简单值: 使用与js相同的语法,可以在json中表示字符串、数值、布尔值和null。但是json不支持js中的特殊值undefined。 2.对象: 对象作为一种负载数据类型,表示的是一组无需的键值对。而每个键值对中的值可以是简单值,也可以是复杂雷西那个的值。 3.数组:数组表示一组有序的值的列表.数组的值可以是任意的类型--简单值、对象或者数组。

第一:简单值:最简单的json数据形式就是简单值。例如数字 5 、字符串 'hello world' 等等。

js中字符串与json字符串最大的区别就是json字符串必须使用双引号.

第二:对象。 js中对象:====》 var person = { name: "wuyue", age:29 };
注意 :其中的key值也可以用双引号括起来. JSON表示上述对象: { "name":"wuyue", "age":29 }

通过以上对比我们可以发现两处不一样:
 1.没有声明变量(JSON中没有变量的概念)
 2.没有末尾的分号(因为JSON不是js语句,所以不需要分号)。

第三: 数组 js数组字面量 var values = [27,"hi",true]; JSON可以采用同样的方法表示一个数组. [25,"hi",true]

========================================================================================扯了那么多,是不是感觉有困了,上边的内容只是做个了解,下面开始步入开发中常用到的重点知识点=========

解析与序列化JSON。 为什么json比xml受欢迎就是因为json可以解析成js对象的形式。如果是xml的话需要把xml数据结构解析成dom如果要提取数据,需要通过dom的方式取得,比如: doc.getElementsByTagName('book')[2].getAttribute('title'); 而json 直接解析成js对象通过 对象.属性的方式姐可以拿到。

JSON对象的方法: stringify() 和 parse(); stringify() 把 js对象序列化为json字符串 parse() 把字符串转为js对象 这俩个就是一个相反的过程.

注意:利用JSON.stringify()方法输出的字符串不包含任何空格字符或者缩进.并且序列化js对象时所有的函数以及原型成员都会被忽略,不体现在结果中。此外值为undefined的任何属性也会被跳过,结果中最终的值都是json数据类型的实例属性。

序列化选项:

JSON.stringify() 一共有三个参数,第二个参数是个过滤器 可以是一个数组,也可以是一个函数。 第三个参数是一个选项,表示是否在json字符串中保留缩进。请看下列实例:

1.过滤结果 如过过滤器是数组,那么结果中只包含数组中列出的属性。

如果是函数,函数返回值就是相应的键值。如果函数返回undefined 那么相应的属性会被忽略。

2.字符串缩进 第三个参数用于控制结果中的缩进和空白符,如果是一个数值,表示每个级别缩进的空格数。 例如缩进4个空格。

注意:结果中也插入了换行符,只要传入了有效的控制缩进的参数值,结果中就会包含换行符。最大缩进空格为10 ,大于10自动转换为10. 如果缩进参数为一个字符串而非数值,则这个字符串被用作缩进字符不在使用空格.

3.toJSON()方法 有时候 json.stringify()并不能满足对某些对象进行自定义序列化的需要。在这些情况下可以给对象定义toJSON()方法,返回自身的json数据格式。例如:

toJSON()可以作为函数过滤器的补充,因此理解修恶化的内部顺序十分重要。假如把一个对象传入
json.stringify(),序列化该对象的顺序如下:
  1.如果存在toJSON()方法而且能通过它取得有效值,则调用该方法,否则返回对象本身.
  2.如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第一步返回的值。
  3.对第二部返回的每个值进行相应的序列化。
  4.如果存在第三个参数,执行相应的格式化.

解析选项

JSON.parse() 还可以接受另外一个参数,该参数是一个函数,第一个参数是key 第二个参数是value 。 JSON.stringify()接收的叫天魂(过滤)函数,而这个函数叫做还原函数. 这两个函数都必须返回一个值,并且参数都是一个键一个值。

 例如在日期字符串转换为Date对象时,经常要用到还原函数.

暂时也就这么多,后期在补上更多的例子,没事间写了,困了。有不对之处请私信我。