这是我参与11月更文挑战的第30天,活动详情查看:2021最后一次更文挑战
JSON
json中可以出现字符串、数值、布尔值和null,但是不能使用undefined。json没有变量、函数或者对象实例的概念,所有的记号就是为了表示结构化数据。json字符串必须使用双引号。与JavaScript对象字面量相比,json没有变量声明,最后位置也没有分号,属性名需要用引号进行包裹。属性的值可以用简单值或者复杂数据类型值,后者可以在对象中再嵌套对象。
{
"web": "js",
"zss": {
"name": "菜鸟",
"value": 26,
"web": "js"
}
}
json对象中可以有两个属性都叫web,因为它们属于不同的对象,但是如果换成同一个对象就不允许出现两个相同的属性。
json对象有两个方法,stringify()和parse(),这两个方法可以将JavaScript序列化转为json字符串也可以将json解析为原生的JavaScript值。JSON.stringify()可以把一个JavaScript对象序列换转为一个JSON字符串,一般默认情况下,JSON.stringify()会输出不包含空格或缩进的JSON字符串。在序列化JavaScript对象时,所有函数和原型成员都会有意地在结果中省略。值为undefined的任何属性也会被跳过。最终得到的是所有实例属性均为有效的JSON数据类型。JSON字符串可以直接传给JSON.parse(),然后得到相应的JavaScript值,如果给JSON.parse()传入的JSON字符串无效,则会报错。
JSON.parse()方法也可以接受一个额外的参数,这个函数会针对每个键值对都调用一次。这个函数也接收两个参数,属性名和属性值。如果这个函数返回undefined,结果就会删除相应的键。如果返回的是其他任何值,那么这个值就会成为相应键的值插入到结果中。除此之外,还可以用于把日期字符串转换为Date对象。
JSON.stringify()方法除了要序列化的对象还可以接收两个参数,这两个参数用于指定其他序列化JavaScript对象的方式。第一个参数是过滤器可以是数组或函数。第二个参数是用于缩进结果JSON字符串的选项。
let test = {
"web": "js",
"num": [
"zss",
"cz"
],
"age": 111
}
let testJson = JSON.stringify(test, ["web", "age"]);
如果第二个参数是一个函数,则行为又有不同。提供的函数可以接收两个参数,分别是属性名和属性值。JSON.stringify()方法的第三个参数控制缩进和空格。如果这个参数是数值,那么用来表示每一级缩进的空格数。最大缩进值为10,当数值大于10时会自动设置为10。如果缩进参数是一个字符串不是数值,那么JSON字符串中就会使用这个字符串而不是空格来缩进。使用字符串也可以将缩进字符串设置为tab或任何字符。