JSON是一种数据格式,不是一种编程语言。

一、语法

   JSON语法可以表示以下三种类型的值:简单值、对象、数组。

1、简单值

  最简单的JSON数据值就是简单值:

5
"hello world"

2、对象

  JSON对象与JAVASCRIPT字面量有些不同,以下是javascript中的对象字面量:

// 表示方法1
    var person = {
        name:"Lillian",
        age:24
    };
// 表示方法2
    var person1 = {
        "name":"Lillian",
        "age":24
    };

  JSON对象有两个不一样的地方,1)没有声明变量(JSON对象中没有变量的概念);2)没有末尾的分号;3)对象的属性必须加双引号

//json表示上述对象的方式
{
    "name":"Lillian",
    "age":24
} 
{
    "name":"Lillian",
    "age":24,
    "school":{
        "name":"CQUPT",
        "location":"ChongQing"
    }
} 

3、数组

  JSON表示数组:

[25,"hi",true]

  把对象和数组结合起来,可以表示复杂的数据结构:

[
    {
        "title": "professional javascript",
        "author": [
            "Matthew"
        ],
        "edtion": 3,
        "year": 2011
    },
    {
        "title": "professional javascript",
        "author": [
            "Matthew"
        ],
        "edtion": 4,
        "year": 2012
    },
    {
        "title": "professional javascript",
        "author": [
            "Matthew"
        ],
        "edtion": 5,
        "year": 2013
    },
    {
        "title": "professional javascript",
        "author": [
            "Matthew"
        ],
        "edtion": 6,
        "year": 2014
    },
    {
        "title": "professional javascript",
        "author": [
            "Matthew"
        ],
        "edtion": 7,
        "year": 2015
    }
]

二、序列化选项

  与XML数据结构要解析成DOM文档而且从中提取数据极为麻烦相比,JSON可以解析为JAVASCRIPT的优势及其明显。

1、JSON对象 

// JSON对象有两个方法,分别用于把Javascript对象序列化成json字符串和把json字符串解析为原生javascript值
var book = {
    title:"professional javascript",
    authors:[
        "Matthew"
    ],
    edition:3,
    year:2016
};
// 序列化成字符串
var jsonText= JSON.stringify(book);
alert(jsonText);
// 创建json对象
var bookCopy = JSON.parse(jsonText);
alert(bookCopy);

2、过滤结果和缩进

  JSON.stringify()除了要序列化的javascript对象外,还可以接受另外两个参数:第一个参数是一个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。

// exampl1: 过滤器是数组
var book = {
    title:"professional javascript",
    authors:[
        "Matthew",
        "Lillian"
    ],
    edition:3,
    year:2016
};
var jsonText = JSON.stringify(book, ["title","edition"]);

// example2:过滤器是函数
var jsonText2 = JSON.stringify(book, function(key, value){
    switch(key){
        case "authors":
            return value.join(",");
        case "edition":
            return undefined;  //相当于去掉
        case "year":
            return 5000;
        default:
            return value;  //相当于保留原值
    }
});

// example3: 第三个参数表示每个级别缩进的空格数
var jsonText3 = JSON.stringify(book, null,8);

// example4: 第三个参数是非数值,则在JSON字符串中被用作缩进字符
var jsonText4 = JSON.stringify(book, null,"A");

3、toJSON方法

  toJSON可以作为函数过滤器的补充,如果存在toJSON方法而且能够通过它取得有效值,那么调用该方法;否则,按默认顺序执行序列化

// 可以为任何对象添加toJSON方法
// 如果存在toJSON方法而且能够通过它取得有效值,那么调用该方法;否则,按默认顺序执行序列化
var book = {
    title:"professional javascript",
    authors:[
        "Matthew",
        "Lillian"
    ],
    edition:3,
    year:2016,
    toJSON:function(){
        return this.title;
    }
};
var jsonText = JSON.stringify(book);

三、解析选项

  JSON.stringify()可以接受两个参数,第二个参数如果是一个函数,将在每个键值对上调用:

var book = {
    title:"professional javascript",
    authors:[
        "Matthew",
        "Lillian"
    ],
    edition:3,
    year:2016,
    // 调用JSON.stringify会解析每一个选项,因此以下的date对象也会被解析成字符串
    releaseDate:new Date(2016,8,13)
};
var jsonText = JSON.stringify(book);

var bookCopy = JSON.parse(jsonText, function(key, value){
    // 被还原成了Date对象
    if(key == "releaseDate"){
        return new Date(value);
    }else{
        return value;
    }

});
// releaseDate被还原成了对象,因此可以调用getFullYear()方法
alert(bookCopy.releaseDate.getFullYear());

《JAVASCRIPT高级程序设计》JSON语法/解析/序列化的更多相关文章

  1. 读书笔记(01) - JSON - JavaScript高级程序设计

    JSON与JavaScript对象 JSON是一种表示结构化数据的存储格式,语法格式上与JavasScript对象有些类似. TIPS: 与JavaScript对象的格式区别 不支持变量.函数或对象实 ...

  2. 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...

  3. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  4. JavaScript高级程序设计(第4版)知识点总结

    介绍 JavaScript高级程序设计 第四版,在第三版的基础上添加了ES6相关的内容.如let.const关键字,Fetch API.工作者线程.模块.Promise 等.适合具有一定编程经验的 W ...

  5. 《JavaScript高级程序设计》学习笔记

    系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...

  6. JavaScript高级程序设计(第三版)学习笔记20、21、23章

    第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...

  7. JavaScript高级编程———JSON

    JavaScript高级编程———JSON < script > /*JSON的语法可以表达一下三种类型的值 简单值:使用与javas相同的语法,可以在JSON中表达字符串.数值.布尔值和 ...

  8. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  9. <JavaScript>如何阅读《JavaScript高级程序设计》(一)

    题外话 最近在看<JavaScript高级程序设计>这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下..探究一下到底怎么读这本书.本书的内容好像只有到ES5...所以只能 ...

随机推荐

  1. linux下文件和目录的颜色表示

    蓝色表示目录: 绿色表示可执行文件: 红色表示压缩文件: 浅蓝色表示链接文件: 灰色表示其它文件: 红色闪烁表示链接的文件有问题了: 黄色是设备文件,包括block, char, fifo. (摘自: ...

  2. MySQL的 explain 解析

    EXPLAIN 的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 项 说明 id MySQL Query Optimizer 选定的执行计划中查询的序列号.表示查询中执行 select 子句 ...

  3. (简单) POJ 1511 Invitation Cards,SPFA。

    Description In the age of television, not many people attend theater performances. Antique Comedians ...

  4. Delphi 内存分配 StrAlloc New(转)

    源:Delphi 内存分配 StrAlloc New 引自:http://anony3721.blog.163.com/blog/static/5119742010824934164/   给字符指针 ...

  5. cocos2d动作讲解

    从本章开始,我们开始讲解cocos2d-x库的动作(Action).游戏的世界是一个动态的世界:无论是主角精灵还是NPC精灵都处于不断的运动当中,甚至是背景中漂流的树叶,随风而动的小草.这些明显的或者 ...

  6. NOIP前刷水行动

    2016.11.15 BZOJ1009:DP+矩阵乘法+KMP BZOJ1898:矩阵乘法 BZOJ4101:贪心,考虑我们往右边撞的时候,我们会向左边冲 ,于是枚举答案点利用一个指针计算即可! 20 ...

  7. td文字过长部分显示,鼠标移动显示全部内容

    只要在该td中加上title属性,鼠标移到这里就会看到全部内容, 在td中加上div,属性设置如下,就能显示宽度为200px的内容,大于则隐藏.代码如下: <td title="我是代 ...

  8. mysql 常用指令

    修改表的字符集 88down voteaccepted If you want to change the table default character set and all character ...

  9. MongoDB的$type操作符

    字段类型定义: db.col.find({"title" : {$type : 2}})

  10. uWSGI参考资料(1.0版本的配置选项列表)

    Reference: http://blog.csdn.net/kevin6216/article/details/15378617 uWSGI参考资料(1.0版本的配置选项列表) 下面的内容包含了大 ...