以原生方式操作JavaScript对象
在异步应用程序中发送和接收信息时,可以选择以纯文本和XML作为数据格式。这一期讨论另一种有用的数据格式JavaScript Object Notation(JSON),以及如何使用它更轻松地在应用程序中移动数据和对象。
解决任何问题的选择越多,找到问题的最佳解决方案的可能性就越大,这比只能使用一个解决方案要好得多。
回顾名称/值对和XML
XML通常更适合用来向Ajax应用程序做出响应,而不是从Ajax应用程序发出请求。
添加JSON
有时候JavaScript不仅仅作为格式化语言使用。在这些情况下,实际上使用JavaScript语言中的对象来表示数据,而不仅是将来自Web表单的数据放进请求中。在这些情况下,从JavaScript对象中提取数据,然后在将数据放进名称/值对或XML,就有点儿多此一举了。这时就合适使用JSON:JSON允许轻松地将JavaScript对象转换成可以随请求发送的数据(同步或异步都可以)。
JSON基础
简单地说,JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器程序。
简单 JSON 示例
{ "firstName": "Brett" }
值的数组
@H_301_36@{ "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" } ]}可以使用相同的语法表示多个值(每个值包含多个记录) @H_301_36@{ "firstName": "Brett","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 结构的中间改变表示数据的方式。
在 JavaScript 中使用 JSON
掌握了 JSON 格式之后,在 JavaScript 中使用它就很简单了。JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。
将 JSON 数据赋值给变量
可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它。
访问数据
@H_301_36@people.programmers[0].lastName;修改 JSON 数据
可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:
@H_301_36@people.musicians[1].lastName = "Rachmaninov";转换回字符串
如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单:
可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。
为了对名为myObject 的对象进行转换,只需执行相同形式的命令:
@H_301_36@String myObjectInJSON = myObject.toJSONString();这就是 JSON 与本系列讨论的其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。
最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。