JavaScript基础笔记(十一)JSON

JSON

关于JSON,最重要的一点是理解它是一种数据格式,不是编程语言。

一、语法

JSON 不支持变量、函数或对象实例,它就是一种表示结构化数据的格式,虽然与 JavaScript 中表示
数据的某些语法相同,但它并不局限于 JavaScript 的范畴。

JSON语法可以表示下列三种类型的值:

一)简单值

使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但没有undefined。

注意在表示字符串时,只能使用双引号。

二)对象

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

//JavaScript对象
var person = {
    name: "Tom",
    age :19
};
//与JS对象相比,JSON对象不同的地方:
//1.不能声明变量;2.对象的属性必须加双引号;3.没有末尾分号
{
    "name": "Jerry",
    "age": "8",
    "school": {
        "name": "Nan Shan",
        "location": "xx00"
    }
}

三)数组

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

//JSON中的数组
[22, "Hello", "king"]
    [
        {
            "title": "Professional JavaScript",
            "authors": [
                "Nicholas C. Zakas"
            ],
            edition: 3,
            year: 2011
        },
        {
            "title": "Professional JavaScript",
            "authors": [
                "Nicholas C. Zakas"
            ],
            edition: 2,
            year: 2009
        },
        {
            "title": "Professional Ajax",
            "authors": [
                "Nicholas C. Zakas",
                "Jeremy McPeak",
                "Joe Fawcett"
            ],
            edition: 2,
            year: 2008
        }
    ]

二、解析与序列化

可以把JSON数据结构解析为JavaScript对象。

一)JSON对象

早期浏览器使用eval()函数把JSON解析为JavaScript对象和数组。但使用eval()函数对JSON数据进行转换存在一定风险,

因为可能会执行一些恶意代码。所以,建议使用全局对象JSON。

JSON对象的两个方法:

1)JSON.stringify():把JavaScript对象序列化为JSON字符串。

2)JSON.parse与上面相反。

    var book = {
        title: "JavaScript for xx",
        authors: ['Price', 'Tom', "Alex"],
        edition: 9,
        year: 2200
    };
    var jsonText = JSON.stringify(book);
    console.log(jsonText);
    //{"title":"JavaScript for xx",
    // "authors":["Price","Tom","Alex"],"edition":9,"year":2200}
    var bookInfo = JSON.parse(jsonText);
    console.log(bookInfo.authors);

在序列化 JavaScript 对象时,所有函数及原型成员都会被有意忽略,不体现在结果中。此外,值为
undefined 的任何属性也都会被跳过。

3)toJSON()

    var book = {
        title: "JavaScript for xx",
        authors: ['Price', 'Tom', "Alex"],
        edition: 9,
        year: 2200,
        toJSON: function () {
            return this.title;
        }
    };
    var jsonText = JSON.stringify(book);
    console.log(jsonText); //"JavaScript for xx"
Simple is important!
原文地址:https://www.cnblogs.com/Shadowplay/p/8547004.html