JavaScript高级程序设计(4)
第23章 JSON
### 23.1 语法 703 > JSON 语法支持表示 3 种类型的值:简单值、对象、数组。 ##### 23.1.1 简单值 - > 字符串、数值、布尔值和 null 可以在 JSON 中出现,就像在 JavaScript 中一样。最简单的 JSON 可以是一个数值。JavaScript 字符串与 JSON 字符串的主要区别是,JSON 字符串必须使用双引号(单引号会导致语法错误)。 ##### 23.1.2 对象 - > 与 JavaScript 对象字面量相比,JSON 主要有两处不同。首先,没有变量声明(JSON 中没有变量)。其次,最后没有分号(不需要,因为不是 JavaScript 语句)。同样,用引号将属性名包围起来才是有效的JSON。属性的值可以是简单值或复杂数据类型值,后者可以在对象中再嵌入对象,比如: > > ```json > { > "name": "Nicholas", > "age": 29, > "school": { > "name": "Merrimack College", > "location": "North Andover, MA" > } > } > ``` ##### 23.1.3 数组 - > ```json > [ > { > "title": "Professional JavaScript", > "authors": [ > "Nicholas C. Zakas", > "Matt Frisbie" > ], > "edition": 4, > "year": 2017 > }, > { > "title": "Professional JavaScript", > "authors": [ > "Nicholas C. Zakas" > ], > "edition": 3, > "year": 2011 > } > ] > ``` ### 23.2 解析与序列化 706 ##### 23.2.1 JSON 对象 - > JSON.stringify(obj,过滤器,缩进项):把一个 JavaScript 对象序列化为一个 JSON 字符串。如果第二个参数是一个数组,那么 JSON.stringify()返回的结果只会包含该数组中列出的对象属性。 > > JSON.parse(str):将 JSON 字符串解析为原生 JavaScript 值。 > > **toJSON()**方法: > > ```javascript > let book = { > title: "Professional JavaScript", > authors: [ > "Nicholas C. Zakas", > "Matt Frisbie" > ], > edition: 4, > year: 2017 > }; > ``` ##### 23.2.2 序列化选项 - > ```javascript > //在这个例子中,结果只会包含这两个属性: > let jsonText = JSON.stringify(book, ["title", "edition"]); > > //如果第二个参数是一个函数,接收两个参数:属性名(key)和属性值(value)。可以根据这个 key 决定要对相应属性执行什么操作。这个 key 始终是字符串,只是在值不属于某个键/值对时会是空字符串。 > let jsonText = JSON.stringify(book, (key, value) => { > switch(key) { > case "authors": > //如果键是"authors",则将数组值转换为字符串; > return value.join(",") > case "year": > //如果键是"year",则将值设置为 5000; > return 5000; > case "edition": > //如果键是"edition",则返回 undefined 忽略该属性。 > return undefined; > default: > //最后一定要提供默认返回值,以便返回其他属性传入的值。 > return value; > } > }); > > //第三个参数控制缩进和空格。在这个参数是数值时,表示每一级缩进的空格数。例如,每级缩进 4 个空格,可以这样: > let jsonText = JSON.stringify(book, null, 4); > ``` ##### 23.2.3 解析选项 - > ```javascript > let jsonText = JSON.stringify(book); > let bookCopy = JSON.parse(jsonText, (key, value) => key == "releaseDate" ? new Date(value) : value); > alert(bookCopy.releaseDate.getFullYear()); > ```
顶部
收展
底部
[TOC]
目录
第1章 JavaScript简介
第2章 在 HTML中使用JavaScript
第3章 语言基础(1)语法变量
第3章 语言基础(2)数据类型
第3章 语言基础(3)操作符
第3章 语言基础(4)语句
第4章 变量、作用域与内存
第5章 基本引用类型
第6章 集合引用类型
第7章 迭代器与生成器
第8 章对象、类与面向对象编程
第9章 代理与反射
第10章 函数
第11章 期约与异步函数
第12章 BOM
第13章 客户端检测
第14章 DOM
第15章 DOM 扩展
第16章 DOM2 和 DOM3
第17章 事件
第18章 动画与 Canvas 图形
第19章 表单脚本
第20章 JavaScript API
第21章 错误处理与调试
第22章 处理 XML
第23章 JSON
第24章 网络请求与远程资源
第25章 客户端存储
第26章 模块
第27章 工作者线程
第28章 最佳实践
相关推荐
WebSocket