关于JSON的读书笔记

1.对象

JavaScript对象字面量的表达方式:

var person = {
    name: "Nicholas",
    age: 29
};

当然,也可以写成这样:

var person = {
    "name": "Nicholas",
    "age": 29
};

JSON表示上述对象的方式如下:

{
    "name": "Nicholas",
    "age": 29
}

与JavaScript的对象字面量相比,JSON对象有两个地方不一样:1. 没有声明变量;2. 末尾没有分号;==在JSON中对象的属性必须加双引号!==属性的值可以是简单值,也可以是复杂类型值

{
    "name": "Nicholas",
    "age": 29,
    "school": {
        "name": "Merrimack College",
        "location": "North Andover, MA"
}
}

2.数组

JavaScript中的数组字面量:

var values = [25, "hi", true];

JSON数组

[25, "hi", true]

JSON数组也没有变量和分号


3.JSON对象

JSON对象有两个方法:stringify()和 parse()

JSON.stringify() 方法将一个JavaScript值转换为一个JSON字符串,如果指定了一个replacer函数,则可以替换值,或者如果指定了一个replacer数组,可选地仅包括指定的属性。

举个例子

var book = {
    "title": "Professional JavaScript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011
 };
var jsonText = JSON.stringify(book, function(key, value){
    switch(key){
        case "authors":
        return value.join(",")
        case "year":
        return 5000;
        case "edition":
        return undefined;
        default:
        return value;
}
});

如果函数返回了undefined,那么这个值对应的属性会被删除。最后一定要提供default项,此时返回传入的值,以便其他值都能出现在结果中。缩进字符串最长不能超过 10 个字符长。如果字符串长度超过了 10 个,结果中将只出现前 10 个字
符。

toJSON()方法

举个栗子

var book = {
  "title": "Professional JavaScript",
  "authors": [
  "Nicholas C. Zakas","mihaibo","hanyanna"
  ],
  edition: 3,
  year: {
    lastyear:2016,
    nextyear:2018,
    toJSON:function () {
        return this.lastyear;
    }
  }
};
var jsonText = JSON.stringify(book,null,4);
console.log(jsonText); 
// 返回一下字符串:
{
    "title": "Professional JavaScript",
    "authors": [
        "Nicholas C. Zakas",
        "mihaibo",
        "hanyanna"
    ],
    "edition": 3,
    "year": 2016
}

可以让这个方法返回 undefined,此时如果包含它的对象嵌入在另一个对象中,会导致
它的值变成 null,而如果它是顶级对象,结果就是 undefined

序列化该对象的顺序如下:

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

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

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

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

ps:在将日期字符串转换为 Date 对象时,经常要用到还原函数

举个栗子:

var book = {
    "title": "Professional JavaScript",
    "authors": [
    "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011,
    releaseDate: new Date(2011, 11, 1)
  };
var jsonText = JSON.stringify(book,null,4);
// console.log(jsonText);
var bookCopy = JSON.parse(jsonText, function(key, value){
    if (key == "releaseDate"){
        return new Date(value);
    } else {
      return value;
      }
    });
    console.log(bookCopy.releaseDate.getFullYear()); //2011

你可能感兴趣的:(关于JSON的读书笔记)