- 浏览: 39530 次
- 性别:
- 来自: 北京
文章分类
最新评论
在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。在AJAX中我们将讨论另一种有用的数据格式 JavaScript Object Notation(JSON),以及如何使用它更轻松地在应用程序中移动数据和对象。
在许多异步应用程序中,可以将数据组合成下面这样的形式:
firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com
这样就行了,不需要再做什么了。实际上,Web 老手会意识到通过 GET 请求发送的信息就是采用这种格式。
然后,本系列讨论了 XML。显然,XML 得到了相当多的关注(正面和负面的评价都有),已经在 Ajax 应用程序中广泛使用。XML 数据格式:
<request>
<firstName>Brett</firstName>
<lastName>McLaughlin</lastName>
<email>brett@newInstance.com</email>
</request>
这里的数据与前面看到的相同,但是这一次采用 XML 格式。这没什么了不起的;这只是另一种数据格式,使我们能够使用 XML 而不是纯文本和名称/值对。
本文讨论另一种数据格式,JavaScript Object Notation(JSON)。JSON 看起来既熟悉又陌生。它提供了另一种选择,选择范围更大总是好事情。
选择的意义
在深入研究 JSON 格式的细节之前,您应该了解为什么要用两篇文章讨论另一种数据格式,尤其在已经了解了如何使用 XML 和纯文本的名称/值对的情况下。其实,原因很简单:解决任何问题的选择越多,找到问题的最佳 解决方案的可能性就越大,这比只能使用一个解决方案要好得多。
回顾名称/值对和 XML
本系列已经用了大量篇幅讨论适合使用名称/值对和 XML 的场合。总是应该首先考虑使用名称/值对。对于大多数异步应用程序中的问题,使用名称/值对几乎总是最简单的解决方案,而且它只需要非常基本的 JavaScript 知识。
实际上,除非有某种限制迫使您转向 XML,否则用不着考虑使用别的数据格式。显然,如果要向需要 XML 格式的输入的服务器端程序发送数据,那么希望使用 XML 作为数据格式。但是,在大多数情况下,对于需要向应用程序发送多段信息的服务器,XML 是更好的选择;换句话说,XML 通常更适合用来向 Ajax 应用程序做出响应,而不是从 Ajax 应用程
序发出请求。
添加 JSON
在使用名称/值对或 XML 时,实际上是使用 JavaScript 从应用程序中取得数据并将数据转换成另一种数据格式。在这些情况下,JavaScript 在很大程度上作为一种数据操纵语言,用来移动和操纵来自 Web 表单的数据,并将数据转换为一种适合发送给服务器端程序的格式。但是,有时候 JavaScript 不仅仅作为格式化语言使用。在这些情况下,实际上使用 JavaScript 语言中的对象来表示数据,而不仅是将来自 Web 表单的数据放进请求中。在这些情况下,从 JavaScript 对象中提取数据,然后再将数据放进名称/值对或 XML,就有点儿多此一举了。这时就比较适合使用 JSON:
JSON 允许轻松地将 JavaScript 对象转换成可以随请求发送的数据(同步或异步都可以)。
JSON 并不是某种魔弹;但是,它对于某些非常特殊的情况是很好的选择。不要认为您不会遇到这些情况。阅读本文和下一篇文章来了解 JSON,这样,遇到这类问题时您就知道该怎么办了。
JSON 基础
简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/值对更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
简单 JSON 示例
按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:
{ "firstName": "Brett" }
这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间:
firstName=Brett
但是,当将多个名称/值对串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个名称/值对的记录,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }
从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。
值的数组
当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称/值对,那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName 这样的形式。
如果使用 JSON,就只需将多个带花括号的记录分组在一起:
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
]}
这不难理解。在这个示例中,只有一个名为 people 的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
}
这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称/值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。
在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。
在 JavaScript 中使用 JSON
掌握了 JSON 格式之后,在 JavaScript 中使用它就很简单了。JSON 是 JavaScript 原生格式,这意味着在
JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。
将 JSON 数据赋值给变量
例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:
var people =
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
}
这非常简单;现在 people 包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。
访问数据尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进 JavaScript 变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码:
people.programmers[0].lastName;
注意,数组索引是从零开始的。所以,这行代码首先访问 people 变量中的数据;然后移动到称为 programmers 的条目,再移动到第一个记录([0]);最后,访问 lastName 键的值。结果是字符串值 “McLaughlin”。
下面是使用同一变量的几个示例。
people.authors[1].genre // Value is "fantasy"
people.musicians[3].lastName // Undefined. This refers to the fourth entry,and there isn't one
people.programmers.[2].firstName // Value is "Elliotte"
利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。
修改 JSON 数据
正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:
people.musicians[1].lastName = "Rachmaninov";
在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。
转换回字符串
当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单:
String newJSONtext = people.toJSONString();
这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。更重要的是,可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject 的对象进行转换,只需执行相同形式的命令:
String myObjectInJSON = myObject.toJSONString();
这就是 JSON 与本系列讨论的其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用 Document Object Model 这样的 API(提供了将自己的数据结构转换为文本的函数),也需要学习这个 API 并使用 API 的对
象,而不是使用原生的 JavaScript 对象和语法。
最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。
发表评论
-
String中的小问题2
2010-10-25 14:24 68//题目;收集顾客反馈意见信息(用户输入的自己姓名、联系方 ... -
斐波那契数列
2010-10-25 14:23 160/**题目:斐波那契数列 * 求fibonacci数列 ... -
String中的小问题
2010-10-25 14:22 90/**题目1: * 给定一个字符串"Aaaa ... -
四种操作xml的方式: SAX, DOM, JDOM , DOM4J的比较
2010-10-25 13:43 57四种操作xml的方式: SAX, DOM, JDOM ... -
用Dom4j解析XML及中文问题
2010-10-25 13:42 301用Dom4j解析XML及中文问题(转载) ... -
Dom4j的使用(转至CSDN)
2010-10-25 13:32 74Dom4j 使用简介 DOM4J ... -
JSON入门二
2010-10-25 13:29 683JSON 的真正价值 正如在上一篇文章 中所描 ... -
a href="#" 与 a href="javascript:void(0)" 的区别(转)
2010-10-25 13:25 808a href="#" 与 a h ... -
浅谈java中的冒泡排序法
2010-10-25 13:13 1897冒泡排序法 冒泡 ... -
浅谈java中的选择排序法
2010-10-25 13:12 1433选择排序法 选择 ... -
C语言中的二分查找(折半查找)
2010-10-25 13:11 2907为了提高查找效率,在一个数组中查找某个数据是否存在时,可 ... -
约瑟夫环2
2010-10-25 13:06 210方法二:用面向对象的思想来解决问题 在同一个包里新建 ... -
约瑟夫环
2010-10-25 13:03 1092著名的约瑟夫环问题详解 问题概述: 已知n个人( ... -
Java中实现对象比较的几个相关概念
2010-10-25 12:54 813在Java中实现对象比较的几个相关概念(转) 一、跟对象 ...
相关推荐
JSON 入门教程 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于纯文本,易于人阅读和编写,同时也易于机器解析和生成。JSON 数据格式具有简单性、灵活性和跨平台、跨语言的特点,使其在 Web...
本资源提供了一本“JSON入门指南”的PDF电子书,旨在帮助初学者快速掌握JSON的基本概念和用法。书中可能涵盖了以下几个方面: 1. **JSON基础**:介绍JSON的起源和特点,以及为什么在Web开发中如此重要。会讲解JSON...
### JSON入门基础教程:理解与应用 #### 一、JSON概览 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript的一个子集,它使用了...
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它的设计目标是易于人阅读和编写,同时也便于机器解析和生成。JSON基于JavaScript的一个子集,采用完全独立于语言的文本格式,但通常与C语言...
JSON(JavaScript Object Notation http://www. json .org/ json -zh.html ),是一种轻量级的基于文本且独立于语言的数据交换格式,比 XML 更轻巧,它是 XML 数据交换的一个替代方案。它源于 ECMAScript 程序语言...
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript的一个子集,但它的影响力远远超越了JavaScript,成为各种编程语言间数据...
本教程将带你入门JSON,并通过Java进行实战操作。 一、JSON基本结构 1. JSON对象:由花括号{}包围,内部包含键值对,键与值之间用冒号隔开,键值对之间用逗号分隔。键必须是字符串,而值可以是各种数据类型,如字符...
在压缩包中的"json入门(1)"文件,可能是包含了一些基本的JSON数据示例或者练习,用来帮助学习者动手操作,理解如何创建、解析和使用JSON。通过实际操作,你可以更加深入地了解JSON的语法和特性,同时掌握如何在AJAX...
在这个"JSONF示例,JSON入门案例"中,我们有两个文件:`index.html`和`pro.php`。这个实例主要展示了如何通过AJAX(异步JavaScript和XML)从服务器端的PHP文件获取并处理JSON数据。 首先,`index.html`是一个HTML...
Java操作JSON入门教程
JSON 入门教程 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。 JSON 是基于纯文本的数据格式,天生是为 JavaScript 准备的,因此 JSON 的数据...
JSON,全称JavaScript ...通过学习提供的“json入门”文档,初学者可以系统地了解JSON的基本概念、语法,并逐步掌握如何在实际项目中使用JSON进行数据交换。在实践中不断练习,才能真正熟练掌握这一重要的数据格式。
1. **对象(Object)**: 在JSON中,对象表示为花括号 `{}` 包围的一组键值对。每个键值对由一个键(Key)和一个值(Value)组成,键和值之间用冒号 `:` 分隔,键值对之间用逗号 `,` 分隔。键必须是字符串,且用双...
### JSON入门教程——非常实用的JSON课件 #### 一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于一种简单的数据结构:对象和数组,易于人阅读和编写,同时也易于机器解析和...
以下是一些关于JSON的基础知识和入门要点: 1. **JSON的结构**: JSON主要由两种基本结构组成: - 对象(Object):以花括号 `{}` 包裹,内部由一系列键值对(Key-Value)构成,键和值之间用冒号 `:` 分隔,键值...
### JSON初学入门教程知识点详解 #### 一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛应用于Web应用程序中进行数据传输。它以文本形式存储,具有简单易读的特点,并且能被...
Json 入门教程详解基础 Json 是一种轻量级的数据交换格式,相比 XML 和 HTML 片段,它提供了更好的简单性和灵活性。Json 数据格式解析简单,易于阅读和编写,可以传输简单的 String、Number、Boolean,也可以传输...
在本压缩包中的“json入门博客资料”中,你可以找到一系列关于JSON的基础知识和在VS(Visual Studio)环境下如何进行开发的教程。 JSON是一种独立的语言无关的数据格式,但它与JavaScript语法高度相似。一个JSON...