📜  Prototype和JSON教程

📅  最后修改于: 2020-10-21 08:47:36             🧑  作者: Mango


 

JSON简介

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

  • JSON对人类来说很容易读写。
  • JSON易于机器解析和生成。
  • JSON基于JavaScript编程语言的子集。
  • JSON在Web上的所有API中都特别有用,并且是Ajax请求中XML的快速替代方案。
  • JSON是一种完全独立于语言的文本格式。

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

JSON编码

原型提供以下编码方法-

注意–确保至少具有1.6版的prototype.js。

S.No. Method & Description
1. Number.toJSON()

Returns a JSON string for the given Number.

2. String.toJSON()

Returns a JSON string for the given String.

3. Array.toJSON()

Returns a JSON string for the given Array.

4. Hash.toJSON()

Returns a JSON string for the given Hash.

5. Date.toJSON()

Converts the date into a JSON string (following the ISO format used by JSON).

6. Object.toJSON()

Returns a JSON string for the given Object.

如果您不确定需要编码的数据类型,最好的选择是使用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 字符串的内容来完成的。原型引入String.evalJSON来处理此问题。例如-

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

这将产生以下结果-

"Violet"

在Ajax中使用JSON

将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);
   }
});