《JAVASCRIPT高级程序设计》JSON语法/解析/序列化
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语法/解析/序列化的更多相关文章
- 读书笔记(01) - JSON - JavaScript高级程序设计
JSON与JavaScript对象 JSON是一种表示结构化数据的存储格式,语法格式上与JavasScript对象有些类似. TIPS: 与JavaScript对象的格式区别 不支持变量.函数或对象实 ...
- 读书笔记(06) - 语法基础 - JavaScript高级程序设计
写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- JavaScript高级程序设计(第4版)知识点总结
介绍 JavaScript高级程序设计 第四版,在第三版的基础上添加了ES6相关的内容.如let.const关键字,Fetch API.工作者线程.模块.Promise 等.适合具有一定编程经验的 W ...
- 《JavaScript高级程序设计》学习笔记
系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...
- JavaScript高级程序设计(第三版)学习笔记20、21、23章
第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...
- JavaScript高级编程———JSON
JavaScript高级编程———JSON < script > /*JSON的语法可以表达一下三种类型的值 简单值:使用与javas相同的语法,可以在JSON中表达字符串.数值.布尔值和 ...
- javascript高级程序设计学习笔记
javascript高级程序设计,当枕头书已经好久了~zz 现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...
- <JavaScript>如何阅读《JavaScript高级程序设计》(一)
题外话 最近在看<JavaScript高级程序设计>这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下..探究一下到底怎么读这本书.本书的内容好像只有到ES5...所以只能 ...
随机推荐
- FM收音机 RDS的强大功能
FM收音机 RDS的强大功能 分类: MTK2011-04-26 16:06 14889人阅读 评论(6) 收藏 举报 交通公告体育音乐娱乐教育 前言 随着发展,会有越来越多的电台具有RDS广播功能, ...
- (六)Jquery Mobile主题及插件的使用
二.自定义主题 根据js自带的主题,提取出来进行更改 来自为知笔记(Wiz)
- Sencha Cmd的简介
Sencha Cmd的简介 ~~~~~~~~~~~~~~~~~~~~~~~ Sencha cmd 是一个跨平台的命令行工具,它从你应用程序的新创建到部署入产品中的整个生命周期都提供了许多自动化的执行任 ...
- 单位冲击响应与频响以及FIR实现代码(C语言)(转)
源:FIR数字滤波器C语言 1.单位冲击响应与频响 就如同之前所说的一样,使用下图所示的单位冲击响应,所设计的滤波器,是无法实现的. 现在,让我们看看其这个滤波器的频响.所谓频响,就是计算其单位冲击响 ...
- uos事件控制块与任务同步
Ucos为了任务之间的通讯定义了信号量,互斥性信号量,消息对象 消息队列等结构以及api,为了统一的管理这些同步,定义了一个结构叫做时间控制块OS_EVENT,如下 typedef struct os ...
- STM32驱动DS18B20
DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器.与传 统的热敏电阻等测温元件相比,它是一种新型的体积小.适用电压宽.与微处理器接口简单的 数字化温度传感器.一线 ...
- Set笔记
Set 继承自Collection的一个接口,特点是:无序,不可重复.注意啊!!只有Collection实现了迭代器!也就是说Map是没有实现迭代器的,需要keySet,values,entrySet ...
- IOS开发-ObjC-NSArray
OC中数组分不可变数组(NSArray)和可变数组(NSMutableArray). 不可变数组: //------------------------------不可变数组------------- ...
- MVVM指南(课程学习)
iOS MVVM 参考 iOS MVVM 前世今生 iOS MVVM 优缺点 下面是我对MVVM知识的总结,主要包括模块划分.开发步骤.重点解说三部分.做这篇文章,主要是考虑总结出可执行的开发步骤,按 ...
- YII 1.0 隐藏单入口index.php 设置路由与伪静态
隐藏 index.php 保证apache配置文件httpd.conf里的LoadModulerewrite_module modules/mod_rewrite.so开启(去掉#)将相对应目录的Al ...