JOSN

JSON是一种数据格式,是JavaScript Object  Notation的缩写。JSON作为JavaScript的一个严格子集,使用了JavaScript中的一些模式来表示结构化数据。

❏ 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JavaScript中的特殊值undefined。

❏ 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。

❏ 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。

 

JSON不支持变量、函数或者对象实例。虽然JSON看起来和对象有点相似,但是有几点区别之处:

1、JSON中没有变量的概念,所以在JSON中不能声明变量;

2、JOSN末尾没有分号;

3、JSON中的属性必须加上双引号。

 

JSON的两个方法

1、JSON.stringify(),把JavaScript对象转化为JSON字符串,在转化的过程中,对象里的函数或者原型成员都会被忽略,属性值为undefined的属性也会被跳过;

JSON.stringify()接受三个参数:

必选:需要序列化的JavaScript对象;

过滤器【可选】:可以是数组、函数;

可选:表示是否在JSON字符串中保留缩进。

const  _json = {
name:"读心悦",
age:28
}
const _json1 = JSON.stringify(_json,["name"])
console.log(_json);

console.log(_json1)

如果过滤器是一个数组,数组中每一项要和将要序列化的对象中属性一一对应,这样在返回的结果字符串中只会包含对应的属性。

如果过滤器是一个函数,那么这个函数接收两个参数:属性名和属性值,函数根据属性名来判断如何处理需要序列化的对象中哪些属性。

const _json = {
name: "读心悦",
lat:"",
age: 28,
mon: [120, 234, 31, 654, 90]
}
const _json1 = JSON.stringify(_json, function (key, value) {
switch (key) {
case "name":
return value;
case "age":
return value;
case "mon":
return value.join(",");
case "lat":
return "暂时未定位";
default:
return value;
}
})
console.log(_json);

console.log(_json1)

 

JSON.stringify()的第三个参数:控制JSON字符串中的缩进和空白符,如下每一项要缩进4个空格;

const _json = {
name: "读心悦",
lat:"",
age: 28,
mon: [120, 234, 31, 654, 90]
}
const _json1 = JSON.stringify(_json,null,4)
console.log(_json1)

打印的结果:

{
"name": "读心悦",
"lat": "",
"age": 28,
"mon": [
120,
234,
31,
654,
90
]
}

 

这个参数最大值为10个缩进空格,当设置的值大于10的时候,会自动转化为10。

const _json1 = JSON.stringify(_json,null,100)
{
"name": "读心悦",
"lat": "",
"age": 28,
"mon": [
120,
234,
31,
654,
90
]
}

 

另外,还有一个方法:toJSON(),这个方法是返回自身的JSON数据格式。可以给任何对象添加toJSON方的。

const _json = {
name: "读心悦",
lat:"",
age: 28,
mon: [120, 234, 31, 654, 90],
toJSON:function(){
return this.name
}
}
const _json1 = JSON.stringify(_json)
console.log(_json1); // "读心悦"

如果给JSON.stringify()传入一个对象,那么在序列化该对象的顺序如下:

(1) 如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。

(2) 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。

(3) 对第(2)步返回的每个值进行相应的序列化。

(4) 如果提供了第三个参数,执行相应的格式化。

 

 

2、JSON.parse(),把JSON字符串转化为相应的JavaScript的值,如果传给JSON.parse()的字符串不是有效的JSON,就会抛出异常。其实JSON.parse()方法可以说是JSON.stringify()的还原函数。除了接收一个JSON字符串之外,也可以接收另一个参数,是一个函数:

const _json = {
name: "读心悦",
lat: "",
age: 28,
mon: [120, 234, 31, 654, 90],
test: {
name: "青竹心"
},
}
const _json1 = JSON.stringify(_json)
const _json2 = JSON.parse(_json1, function (key, value) {
if(key=="name"){
console.log("909090")
}
})
console.log(_json2);

如果还原函数返回undefined,则表示要从结果中删除相应的键;如果返回其他值,则将该值插入到结果中