原型和 JSON 教程


JSON简介

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

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

  • JSON 很容易被机器解析和生成。

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

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

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

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

JSON 编码

原型提供了以下编码方法 -

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

编号 方法及说明
1. Number.toJSON()

返回给定 Number 的 JSON 字符串。

2. String.toJSON()

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

3. Array.toJSON()

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

4. 哈希.toJSON()

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

5. 日期.toJSON()

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

6. 对象.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);
   }
});