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. IE去掉input的type=”text”输入内容时出现的X和type=”password”出现的眼睛图标

    从IE 10开始,type=”text” 的 input 在用户输入内容后,会自动产生一个小叉叉(X),方便用户点击清除已经输入的文本.对于type=”password”的 input 则会在右方显示 ...

  2. MYSQL管理----数据库删除恢复

    (1) 如果备份了,就好解决了.略. (2)如果日志打开,使用mysqlbinlog来恢复. mysqlbinlog工具的使用,大家可以看MySQL的帮助手册.里面有详细的用, 在这个例子中,重点是- ...

  3. 比较实用的webpack配置代码

    var path = require('path');var webpack = require('webpack');var ExtractTextPlugin = require('extract ...

  4. android中广播的使用

    广播消息机制用于进行系统级别的消息通知,每个应用程序可以对感兴趣的广播进行注册,并且将接收广播的方法定义在广播接收器中(Broadcast). 广播可以分为标准广播和有序广播. 注册广播的方法可以动态 ...

  5. POJ 2609 Ferry Loading

    双塔DP+输出路径. 由于内存限制,DP只能开滚动数组来记录. 我的写法比较渣,但是POJ能AC,但是ZOJ依旧MLE,更加奇怪的是Uva上无论怎么改都是WA,其他人POJ过的交到Uva也是WA. # ...

  6. 用weka来做Logistic Regression

    1.首先下载安装weka http://www.cs.waikato.ac.nz/ml/weka/downloading.html 2.打开weka,选择第一项Explorer 3.准备数据集文件,在 ...

  7. VB.NET中的常用方法

    一.如何使用dll库: dll库是动态链接库,一般是别人提供的,用来做二次开发,相当于别人把一些函数包装在dll中,已经生成可以链接文件,你只能调用,但是不能看到方法的实现.所以给你提供dll的人一般 ...

  8. 【python之路11】集合数据类型(set)

    集合数据类型(set):集合是不重复的无需序列 1.集合数据类型的创建 a = {11,22,33} #或 a = set() #创建空集合,不能用a={},这样创建的是字典类型 2.集合转换(将可迭 ...

  9. UVa 532 - Dungeon Master

    题目大意:给一个三维迷宫,给出入口和出口,找出最短路径. 无权图上的单源最短路问题,使用BFS解决. #include <cstdio> #include <queue> #i ...

  10. robotium从入门到放弃 三 基于apk的自动化测试

      1.apk重签名   在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法. 首先将被测 ...