2009-02-16 4 views
80

Ai đó có thể cho tôi biết sự khác biệt giữa 2 trình phân tích cú pháp JSON không?Sự khác biệt giữa json.js và json2.js

https://github.com/douglascrockford/JSON-js/blob/master/json.js
https://github.com/douglascrockford/JSON-js/blob/master/json2.js

Tôi có một tập tin JSON từ 2007/04/13 (Nó có các phương pháp như parseJSON). Tôi không thấy các phương pháp này trong bất kỳ phiên bản mới nào.

+2

Bạn có thể tìm thấy những tập tin mới đây https://github.com/douglascrockford/JSON-js –

+0

Đối với bất cứ ai đến đây câu hỏi tự hỏi về những tệp này là gì, biết rằng không có lý do gì để sử dụng chúng trong các trình duyệt hiện đại. Từ [GitHub repo] (https://github.com/douglascrockford/JSON-js): "Trên các trình duyệt hiện tại, [json2.js] không làm gì cả, thích đối tượng JSON được tích hợp sẵn. Không có lý do gì để sử dụng tập tin trừ khi số phận buộc bạn phải hỗ trợ IE8, đó là điều mà không ai có thể phải làm lại. " – Thunderforge

Trả lời

56

Từ mã của họ:

// Augment the basic prototypes if they have not already been augmented. 
// These forms are obsolete. It is recommended that JSON.stringify and 
// JSON.parse be used instead. 

if (!Object.prototype.toJSONString) { 
    Object.prototype.toJSONString = function (filter) { 
     return JSON.stringify(this, filter); 
    }; 
    Object.prototype.parseJSON = function (filter) { 
     return JSON.parse(this, filter); 
    }; 
} 

Tôi đoán parseJSON là lỗi thời, vì thế phiên bản mới (json2) thậm chí không sử dụng nó nữa. Tuy nhiên nếu bạn sử dụng parseJSON rất nhiều bạn chỉ có thể thêm đoạn mã này ở đâu đó để làm cho nó hoạt động trở lại:

Object.prototype.parseJSON = function (filter) { 
     return JSON.parse(this, filter); 
    }; 
+1

Cảm ơn, vì vậy có vẻ như parseJSON đã được thay thế bằng JSON.parse? Ngoài ra, điều gì về toJSONString? mã hiện tại của chúng tôi sử dụng rất nhiều các phương pháp: boolean.toJSONString() date.toJSONString() number.toJSONString() object.toJSONString() string.toJSONString() –

+0

Sau đó cũng thêm đoạn 1 mã, tất cả các giá trị bạn chỉ định là các đối tượng, do đó tất cả các giá trị đó sẽ được chuyển đổi để sử dụng JSON.stringify tự động. –

+0

Cảm ơn! Tôi sẽ thử. Vậy, tôi có thể thêm các hàm này vào tệp json.js không? –

30

Trích dẫn here:

"JSON2.js - Cuối năm ngoái Crockford lặng lẽ phát hành một mới phiên bản API JSON của anh ấy đã thay thế API hiện tại của anh ấy. Sự khác biệt quan trọng là nó sử dụng một đối tượng cơ sở duy nhất. "

20

Tôi cũng nhận thấy rằng các chuỗi được xâu chuỗi json2 khác với json2007.

Trong json2007:

var array = []; 
array[1] = "apple"; 
array[2] = "orange"; 
alert(array.toJSONString()); // Output: ["apple", "orange"]. 

Trong json2:

var array = []; 
array[1] = "apple"; 
array[2] = "orange"; 
alert(JSON.stringify(array)); // Output: [null, "apple", "orange"]. 
+3

json2 là chính xác trong trường hợp này. json2007 đã sai khi bỏ qua phần tử đầu tiên tại chỉ số 0. –