A-A+

JSON回顾

2016年10月03日 JavaScript 暂无评论

以下内容来自《javascript高级程序设计》第20章

JSON是一种数据格式,不从属于js。不支持变量、函数或对象实例,是一种表示结构化数据的格式。js字符串与json字符串的最大区别:json字符串必须使用双引号

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

简单值:与js相同的语法,但不支持undefined。如:5.  “hello”。

对象:无序的键值对。

数组:有序的值的列表。json数组没有变量和分号。对象和数组通常是json数据结构的最外层形式。

 

解析与序列化

json对象的两个方法:

stringify()把js对象序列化为json字符串

parse()把json字符串解析为原生js值。

在序列化 JavaScript 对象时,所有函数及原型成员都会被有意忽略,不体现在结果中。值为undefined 的任何属性也都会被跳过。结果中最终都是值为有效 JSON 数据类型的实例属性。.默认情况下, JSON.stringify()输出的 JSON 字符串不包含任何空格字符或缩进.

序列化选项

 

JSON.stringify()还可接受另外两个参数,第一个参数是过滤器,可为数组或函数,第二个是一个选项,表示是否在json字符串中保留缩进。

如果第二个参数是函数,行为会稍有不同。传入的函数接收两个参数,属性(键)名和属性值。根据属性(键)名可以知道应该如何处理要序列化的对象中的属性。属性名只能是字符串,而在值并非键值对儿结构的值时,键名可以是空字符串。函数返回的值就是相应键的值,如果返回 undefined,那么相应的属性会被忽略。

JSON.stringify()方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数。

JSON.stringify()也在结果字符串中插入了换行符以提高可读性。只要传入有效的控制缩进的参数值,结果字符串就会包含换行符。(只缩进而不换行意义不大。)最大缩进空格数为 10,大于 10 的值自动转换为 10.如果缩进参数是一个字符串而非数值,则这个字符串将在 JSON 字符串中被用作缩进字符.

toJSON()方法

序列化顺序

(1) 如果存在 toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。

(2) 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。

(3) 对第(2)步返回的每个值进行相应的序列化。

(4) 如果提供了第三个参数,执行相应的格式化

 

解析选项

JSON.parse()也可接受另外一个参数,此参数为函数,会在每个键值对儿上调用。还原函数。

 

 

 

JSON

JavaScript 对象表示法(JavaScript Object Notation

特点:存储和交换文本信息的语法,比 XML 更小、更快,更易解析。 JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。JSON 文本的 MIME 类型是 "application/json".

JSON vs XML

类似 XML

JSON 是纯文本、 具有“自我描述性”(人类可读)、 具有层级结构(值中存在值)、 可通过 JavaScript 进行解析、JSON 数据可使用 AJAX 进行传输。

不同之处

没有结束标签、更短、读写的速度更快、能够使用内建的 JavaScript eval() 方法进行解析、使用数组、不使用保留字

为什么要用json:对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用。

JSON 语法

JSON 语法是 JavaScript 语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对   "firstName" : "John" 等价于 firstName = "John"

JSON 值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、数组(在方括号中)、对象(在花括号中)、null。

JSON 对象   花括号中书写:{ "firstName":"John" , "lastName":"Doe" }

JSON 数组   在方括号中书写

 

把 JSON 文本转换为 JavaScript 对象         eval() 函数

必须把文本包围在括号中,可避免语法错误.

使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。

资料

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON

JavaScript 库: https://github.com/douglascrockford/JSON-js

 

 

 

给我留言

Copyright © 花未全开月未圆 保留所有权利.   Theme  Ality

用户登录