Prototype 和 JSON 教程



JSON 简介

JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式。

  • JSON 易于人类阅读和编写。

  • JSON 易于机器解析和生成。

  • JSON 基于 JavaScript 编程语言的一个子集。

  • JSON 尤其被网络上的 API 广泛使用,并且是 Ajax 请求中 XML 的快速替代方案。

  • JSON 是一种完全独立于语言的文本格式。

Prototype 1.5.1 及更高版本具有 JSON 编码和解析支持。

JSON 编码

Prototype 提供以下编码方法:

注意 - 请确保至少拥有 prototype.js 1.6 版本。

序号 方法及描述
1. Number.toJSON()

返回给定数字的 JSON 字符串。

2. String.toJSON()

返回给定字符串的 JSON 字符串。

3. Array.toJSON()

返回给定数组的 JSON 字符串。

4. Hash.toJSON()

返回给定哈希的 JSON 字符串。

5. Date.toJSON()

将日期转换为 JSON 字符串(遵循 JSON 使用的 ISO 格式)。

6. Object.toJSON()

返回给定对象的 JSON 字符串。

如果您不确定需要编码的数据类型,最佳选择是使用 Object.toJSON,例如:

var data = {name: 'Violet', occupation: 'character', age: 25 };
Object.toJSON(data);

这将产生以下结果:

'{"name": "Violet", "occupation": "character", "age": 25}'

此外,如果您使用自定义对象,您可以设置自己的 toJSON 方法,该方法将由 Object.toJSON 使用。例如:

var Person = Class.create();
Person.prototype = {
   initialize: function(name, age) {
      this.name = name;
      this.age = age;
   },  
   toJSON: function() {
      return ('My name is ' + this.name + 
         ' and I am ' + this.age + ' years old.').toJSON();
   }
};
var john = new Person('John', 49);
Object.toJSON(john);

这将产生以下结果:

'"My name is John and I am 49 years old."'

解析 JSON

在 JavaScript 中,解析 JSON 通常通过评估 JSON 字符串的内容来完成。Prototype 引入了 String.evalJSON 来处理此问题。例如:

var d='{ "name":"Violet","occupation":"character" }'.evalJSON();
d.name;

这将产生以下结果:

"Violet"

将 JSON 与 Ajax 结合使用

将 JSON 与 Ajax 结合使用非常简单。只需在传输的 responseText 属性上调用 String.evalJSON 即可:

new Ajax.Request('/some_url', {
   method:'get',
   onSuccess: function(transport) {
      var json = transport.responseText.evalJSON();
   }
});

如果您的数据来自不受信任的来源,请确保对其进行清理:

new Ajax.Request('/some_url', {
   method:'get',
   requestHeaders: {Accept: 'application/json'},
   onSuccess: function(transport) {
      var json = transport.responseText.evalJSON(true);
   }
}); 
广告