Prototype 和 JSON 教程

JSON 简介

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

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

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

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

  • JSON 在整个 Web 上被 API 广泛使用,是 Ajax 请求中 XML 的快速替代方案。

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

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

JSON 编码

Prototype 提供以下方法编码 −

注意 − 确保至少拥有 1.6 版的prototype.js。

S.No. 方法 &描述
1. Number.toJSON()

返回给定 Number 的 JSON 字符串。

2. String.toJSON()

返回给定 String 的 JSON 字符串。

3. Array.toJSON()

返回给定数组。

4. Hash.toJSON()

返回给定 Hash 的 JSON 字符串。

5. Date.toJSON()

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

6. Object.toJSON()

返回给定Object.

如果您不确定需要编码的数据类型,最好的办法是使用 Object.toJSON,因此 −

var data = {name: 'Violet', employment: '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);
   }
});