JSON语法

1 JSON的特点

JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量。

2 JSON和JS的语法差别

1⃣️JSON语法可以表示三类值:简单值,对象,数组。
JS和JSON,字符串区别是JSON里的字符串必须用双引号,用单引号会有语法错误。

2⃣️JSON对象和JS对象字面量的不同: 1.没有声明变量 2.没有末尾的分号

JS对象字面量的标准方式:

var person = {
     name: "song",
     age:18
};

也可以这样:

var person = {
       "name": "song",
       "age": 18
};

JSON表示对象的方法如下:

{
    "name": "song",
    "age": 18
}
  这里补充一条:
  json表示数组的方法: {  "author":[ "age", 25, true]}
3 JSON的序列化

json.stringify()除了要序列化的js对象外,还可以接受两个参数。
☝️ 第一个参数的作用是过滤,参数可以是数组,也可以是函数;
☝️ 第二个参数是一个选项,表示是否在json字符串中保留缩紧。
单独或组合使用这两个参数,可以更全面深入地控制json的序列化。

过滤结果

如果过滤器是数组,则结果中只包含数组中列出来的属性,例:

var book = {
    "title" : "hello",
    "author" : ["song"],
    "edition" : 3,
    "year" : 2011
};
var jsonText = JSON.stringify(book,["title","edition"]);

运行结果:
jsonText={ 
    title:"hello",
    edition:3
};

如果过滤器是函数,传入的函数需要接收两个参数,分别是属性名和属性值,根据属性名可以知道应该如何处理要序列化的对象的属性。例:

var book = {
    "title" : "hello",
    "author" : ["song"],
    "edition" : 3,
    "year" : 2011
};
var jsonText = JSON.stringify(book,function(key, value){
  switch(key) {
    case "author":
      return value.json(",");
    case "year":
      return 5000;
    case "edition":
      return undefined;
    default:
      return value;
  }
})

这里,函数过滤器根据传入的值来决定,如果键是“authors”,就将数组连接为一个字符串;如果键为“year”,则将其值设为5000;如果键为“edition”,通过返回“undefined”删除该属性。
⚠️ 最后一定要提供default项。

                                       总结:

如果把一个对象传进JSON.stringify(),序列化该对象的顺序如下:
1⃣️ 如果存在toJSON()方法,而且能通过他取得有效的值,则调用该方法,否则,返回对象本身。
2⃣️ 如果提供了第二个参数,应用这个函数过滤器,传入函数过滤器的值是1⃣️返回的值。
3⃣️ 对2⃣️返回的每个值进行相应的序列化。
4⃣️ 如果提供了第三个参数,执行相应的格式化。

4 JSON的解析

JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对上调用,这个函数被称为还原函数。例:

var book = {
    "title" : "hello",
    "author" : ["song"],
    "edition" : 3,
    "year" : 2011,
    releaseDate : new Date(2011,11,1)
};
var jsonText = JSON.stringify(book);
var bookCopy = JSON.parse(jsonText, function(key, value){
  if(key == "releaseDate"){
    return new Date(value);
  }else{
    return value;
  }
});

你可能感兴趣的:(JSON语法)