JSON学习笔记
一、对JSON进行简单的介绍
1、JSON是一种数据格式,不是编程语言
2、JSON可以表示简单值、对象、以及数组
二、JSON可以表示的三种类型的数据
1、简单值
数字,字符串,布尔值,null:5,”Hello World!”,True,null等
注:字符串必须用双引号
2、对象
可以通过与JS中的对象进行对比来更加直观的了解JSON中的对象。
JS中的对象:
var person = {
name:"xiaoming",
age:29
};
JSON中的对象
{
"name":"xiaoming",
"age":29
}
3、数组
同样,可以通过对比JS中的数组能够更加直观的了解JSON中的数组。
JS中的数组:
var values = [25,"hi",true];
JSON中的数组
[25,"hi",true]
三、JSON数据的解析
1、序列化
JSON解析为JS对象的实现方法相对于在DOM结构中查找数据较为简单。(例子)成为了Web服务开发中交换数据的事实标准。以以下JSON数据为例:
{
{
"title":"Thinking in Java",
"authors":[
"XXXX"
],
"edition":4,
"year":2011
},
{
"title":"Thinking in Java",
"authors":[
"XXXX",
"XXXXX",
],
"edition":3,
"year":2009
},
{
"title":"Thinking in Java",
"authors":[
"XXXX",
"XXXXX",
"XXXXXX"
],
"edition":2,
"year":2008
},
{
"title":"Thinking in Java",
"authors":[
"XXXX",
"XXXXX",
"XXXXXX",
"XXXXXXX"
],
"edition":1,
"year":2007
},
}
在解析为JS对象后,只需要一行代码就可以得到第三本书的书名:
books[2].title
而通过对DOM进行操作则需要:
document.getElementsByTagName("book")[2].getAttribute("title")
-
JSON对象有两个方法(函数):stringify()用于把JS对象序列化为JSON字符串;parse()用于把JSON字符串解析为JS的值。
-
JSON.stringify()方法把JS对象序列化为JSON字符串,然后将其保存在jsonText中,并且默认不包含任何空格字符或者缩进,所有的函数以及原型成员都会被忽略,不体现在结果中,undefined的值或者属性都会被跳过。
-
将JSON字符串直接传给JSON.parse()就可以得到相应的JS值。
而这两个方法(函数)的具体使用方法与细节方面的问题,还请查阅详细的资料,在这里也就不进行太过详细的描述了。
2、序列化选项
JSON.stringify()除了要序列化的JS对象外,还可以接收另外两个参数:第一个参数是个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。
-
过滤器(只对对象的第一层属性有效)
如果过滤器是数组,则JSON.stringify()的结果中将只包含数组中列出的属性(类似于滤波器)。
如果参数为函数,传入的函数接收两个参数,属性名与属性值(键值对)。属性名只能是字符串,当值不是键值对结构的值是,键名可以使空字符串。函数返回的值就是相应键的值。如果函数返回了一个undefined相应的属性就会被忽略。 -
字符串缩进
JSON.stringify()的最后一个参数用于控制结果中的缩进和空白字符。如果参数是一个数值,则表示的是每个级别缩进的空格数。如果参数是一个字符串而数值,则可以将字符串用作缩进的制表符。
toJSON()方法
当JSON.stringify()不满足某些对象进行自定义序列化的需求时,可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式。
也可以让这个方法返回undefined,若此时包含它的对象嵌入了另一个对象中,则会导致该对象的值变成null,如果包含它的对象是顶级对象,则该对象的值就是undefined。
toJSON()方法可以作为过滤器的补充,(toJSON()方法实际上是返回整个对象需要进行序列化的属性)JSON.stringify()序列化对象的顺序:
- 如果有toJSON()方法且能够取得有效的值,则调用该方法;否则按照默认顺序执行;
- 如果提供了过滤器,应用这个过滤器。传入过滤器的值是1返回的值
- 对2返回的每个值进行相应的序列化;
- 4如果提供了字符串缩进,则执行相应的格式化
3、解析选项
JSON.parse()方法除了接收要转化为对象的JSON字符串之外,还可以接收一个参数,该参数是一个函数,在每个键值对上调用。
为了区别JSON.stringify()接收的过滤函数,JSON.parse()接收的函数称为还原函数,如果还原函数返回undefined,则表示要从结果中删除相应的键,如果返回其他值,则将该值插入到结果中。在将日期字符串转换为Date对象时,经常要用到还原函数。
本文只是对JSON进行了初步的学习及了解,也没有对JSON解析工具进行描述。