javascrpt之JSON全解析

来源:互联网 发布:淘宝网尿道炎药品注射 编辑:程序博客网 时间:2024/05/25 16:39

javascrpt之JSON全解析

过去有一段时间,XML是互联网上传输结构化数据的事实标准,突出的特点是服务器与服务器之间的通信。缺点是过于繁琐,冗长。2005年,Douglas Crockford把JSON(JavaScript Object Notation,JavaScript对象表示法)作为IETFRFC4627提交给IETF,实际上JSON的应用早在2001年就已经开始了。JSON是JavaScript的一个严格的子集,利用了JavaScript中的一些模式来表示结构化数据。Crockford认为与XML相比,JSON是在JavaScript中读写结构化数据的更好的方式,因为可以把JSON直接传给eval(),而不必创建DOM对象。JSON是一种数据格式,不是一种编程语言。虽然有相同的语法形式,但是JSON并不从属于JavaScript。而且,并不是只有JavaScript才使用JSON,很多编程语言都有针对JSON的解析器和序列化器。

1、语法

JSON的语法可以表示以下三种类型的值。
- 简单值 - 使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。
- 对象 - 对象作为一种复杂的数据类型,表示一组有序的键值对。每个键值对中的值可以是简单值,也可以是复杂数据类型的值。
- 数组 - 数组也是一种复杂的数据类型,表示一组有序的值得列表,可以通过数值索引来访问其中的值。数组的值可以可是任意类型——简单值、对象或数组。
JSON不支持变量、函数或对象实例,它就是一种表示结构化数据的格式,虽然与JavaScript中表示数据的某些语法相同,但它并不局限于JavaScript范畴。

1.1、简单值

简单值是JSON中最简单的数据形式。例如
1 ——JSON中表示数值1的方法
“hello”——JSON中表示字符串的方法
JavaScript字符串和JSON字符串的最大区别在于,JSON字符串必须使用双引号,单引号会导致语法错误。
布尔值和null也是有效的JSON形式,但是JSON不支持JavaScript中的特殊值undefined。在实际应用中,JSON更多的用来表示更复杂的数据结构,而简单值只是真个数据结构中的一部分。

1.2、对象

下面这是一个JavaScript中的对象字面量:

var person = {    name: "Lian",    age: 23};

JSON表示上述对象的方式如下:

{    "nme": "Lian",    "age": 23}

JSON中的对象与JavaScript中的对象字面量有三个地方不一样。第一,没有声明变量。第二,没有末尾分号。第三,JavaScript中对象的属性名可以没有引号,可以是单引号,也可以是双引号,而JSON中对象的属性必须是双引号。JSON属性的值可以是简单值也可以是复杂类型的值,例如可以在对象中嵌套对象。

{    "nme": "Lian",    "age": 23,    "school": {        "name": "College",        "location": "Shanxi Xian"    }}

在顶级对象中嵌入了学校的信息,虽然有两个“name”属性,但由于它们分别属于不同的对象,因此不会出现错误。不过,同一个对象中绝对不应该出现两个同名属性。

1.3、数组

JSON中的第二种复杂数据类型是数组,JSON数组采用的就是JavaScript中的数组字面量形式。例如,下面这是JavaScript中的数组字面量:

var value = [36, "hello" true];

在JSON中,可以采用同样的语法表示同一个数组:

[36, "hello", true]

与对象一样,JSON数组也没有变量和分号。把数组和对象结合起来,可以构成更加复杂的数据集合。

[    {        "title": "JSON全解析(一)",        "author": [            "Lian"        ],        "edition": 1,        "year": 2017    },      {        "title": "JSON全解析(二)",        "author": [            "Lian"        ],        "edition": 2,        "year": 2017    },      {        "title": "JSON全解析(三)",        "author": [            "Lian",            "Yu",            "Jie"        ],        "edition": 3,        "year": 2017    },      {        "title": "JSON全解析(四)",        "author": [            "Lian"        ],        "edition": 4,        "year": 2017    }]

在这个数组中包含了一些表示文章的对象。每个对象都有几个属性,其中“authors”属性的值又是一个数组。对象和数组通常是JSON数据结构的最外层形式,利用它们能够创造出各种各样的数据结构。

2、解析与序列化

JSON流行的原因之一是拥有与JavaScript类似的语法,更重要的一个原因是,可以把JSON数据结构解析为有用的JavaScript对象。与XML数据结构要解析成DOM文档而且从中提取数据极为麻烦相比,JSON可以解析为JavaScript对象的优势极其明显。以上个例子中包含一组文章的JSON数据结构为例,解析为JavaScript对象并保存到变量article中,只需要下面一行简单的代码就可以取得第三篇文章的名字:

article[2].title

而在DOM结构中查找这些数据的代码:

document.getElementsByTagName("article")[2].getAttribute("title")

明显,通过这种方法调用过于冗长,繁琐。

2.1、JSON对象

最早的时候,JSON解析器基本上就是使用JavaScript的eval()函数。由于JSON是JavaScript语法的子集,因此eval()函数可以解析、解释并返回JavaScript对象和数组。但是在旧版本的浏览器中,使用eval()对JSON数据结构求值存在风险,因为可能会执行一些错误代码。
因为这些原因,ECMAScript 5 对解析JSON的行为进行了规范,定义了全局对象JSON。JSON对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值。例如:

var article = {    title: "JSON全解析(一)",    author: [        "Lian"    ],    edition: 1,    year: 2017};var jsonText = JSON.stringify(article);

这个例子使用JSON.stringify()把一个JavaScript对象序列化为一个 JSON字符串,然后将它保存在变量jsonText中。默认情况下,JSON.stringify()方法输出的JSON字符串不包含任何空格字符或者缩进,因此保存在jsonText中的字符串如下所示:

"{"title":"JSON全解析(一)","author":["Lian"],"edition":1,"year":2017}"

在序列化JavaScript对象时,所有函数及原型成员都会被有意忽略,不会在结果中出现。此外,值为undefined的任何属性也会被跳过,最终结果都是值为有效JSON数据类型的实例属性。
再将JSON字符串直接传递给JSON.parse()方法,就可以得到相应的JavaScript的值。

var articleCopy = JSON.parse(jsonText);{title: "JSON全解析(一)", author: Array[1], edition: 1, year: 2017}

虽然article与articleCopy具有相同的属性,但它们是两个独立的、没有任何关系的对象。,如果传递给JSON.parse()的字符串不是有效的JSON,该方法就会抛出错误。


参考文献

  • JavaScript高级程序设计
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 信度和效度举例分析 萌神信徒 信徒 信徒使者 信徒使者2 魔古信徒 信徒shinja 信徒表家乡 消逝的光芒信徒 信徒使者2谍影行动 消逝的光芒信徒蓝图 信徒表家乡灵歌试听 一地金的信徒作品 消逝的光芒信徒结局 消逝的光芒信徒攻略 消逝的光芒信徒彩蛋 萌神信徒 突然光和热 鬼神使徒 萌鬼信徒 英雄无敌之邪神信徒 信心 信心百倍 重拾信心 信心英文 信心图片 信心拼音 失去信心 信心英语 信心铭 信心的拼音 信心的意思 信心满满 信心十足 暗黑2信心 坚定信心 树立信心 有信心 主啊求你将信心加给我 对生活失去信心怎么办 对生活失去信心 坚定信心埋头苦干奋勇争先 重拾信心作文