json

json和javascript对象

两者非常的相似,所不同的是就是JavaScript对象中属性名,也就是对象的key值是可以没有引号的,其值为字符串时,使用''和""包裹均可。 因此我们很多人将第一段代码块里所写的JSON称为JSON对象,实际上,它并不是一个对象,只是一个单纯的字符串而已,但是它符合JSON的语法规则,可以很方便地转化为JavaScript对象,或者方便地用于数据交换。以下我们来了解一下JSON。

严格的json格式要求

JSON作为一种数据交换格式,为了保证其能被正确方便的解析,其格式有严格的要求,必须遵循以下规则:

1.复合类型的值只能是数组对象,不能是函数、正则表达式对象、日期对象。
2.简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)。
3.字符串必须使用双引号表示,不能使用单引号
4.对象的键名必须放在双引号里面。
5.数组或对象最后一个成员的后面,不能有逗号。
6.数值前不能加0。

json_第1张图片
不和法的json结构

]

注:JSON作为一种数据交换格式,被写入了ECMAScript 5,在IE8及之后的浏览器都提供了一个JSON对象,用于对JSON进行解析和序列化。
ie7及以下版本需要引用json3

JSON.parse()

此方法接收一个JSON字符串,返回解析后的JavaScript对象,通常为Object或Array
如果传入不合法的JSON,则会在JSON.parse时报错。


json_第2张图片
618VBVTG61$T1EIX8GEF)OS.png

在做前后端分离项目中,ajax的响应数据为json为什么我们能点出我们想要的数据?

这里实际是因为指定了dataType为JSON,从而进行了自动化,所以能直接在成功回调中使用其属性。如果去掉dataType的指定,就不能直接访问其属性了,因为未转化时,其本身是一个字符串。第一行输出为test.text的内容,第二行输出undefined。
![1Y9VJXUMWBKA28J2%G~26]U.png](http://upload-images.jianshu.io/upload_images/3402722-cf2dfd3aacb819ff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

我们可能经常看到的是JSON.stringify( obj , null , 4),这样是什么意思呢?

  • 第2个参数
    1.如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;
    2.如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;
    3.如果该参数为null或者未提供,则对象所有的属性都会被序列化;
  • 第三个参数用于指定缩进用的空白字符串,用于美化输出(pretty-print)
    1.如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;
    2.如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;
    3.如果该参数没有提供(或者为null)将没有空格。


    json_第3张图片
    3I2@G14[(TJ3LN$2]A}FW0A.png

你可能感兴趣的:(json)