Sự khác biệt giữa json.js và json2.js


87

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 là gì không?

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 JSON từ 2007-04-13 (Nó có các phương thức 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 tệp mới tại đây github.com/douglascrockford/JSON-js
Daniel Little

1
Đối với bất kỳ ai đến câu hỏi này, thắc mắc về những tệp này là gì, hãy 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ừ repo GitHub : "Trên các trình duyệt hiện tại, [json2.js] không làm gì cả, ưu tiên đối tượng JSON được tích hợp sẵn. Không có lý do gì để sử dụng tệp này trừ khi số phận buộc bạn phải hỗ trợ IE8, đó là thứ mà không ai nên làm phải làm lại. "
Thunderforge

Câu trả lời:


59

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ỗi thời, do đó phiên bản mới (json2) thậm chí không sử dụng nó nữa. Tuy nhiên, nếu mã của bạn sử dụng parseJSONnhiều, bạn chỉ cần thêm đoạn mã này vào đâ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, còn toJSONString thì sao? 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 () number.toJSONString date.toJSONString () () object.toJSONString () string.toJSONString ()

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

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

"absolete" - tuyệt đối hay lỗi thời?
Eric

84
"absolete" - khi nó chắc chắn đã lỗi thời.
davidtbernal

31

Trích dẫn ở đây :

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


25

Tôi cũng nhận thấy rằng các mảng đượ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"].

4
json2 là đúng trong trường hợp này. json2007 đã sai lầm khi bỏ qua các yếu tố đầu tiên tại chỉ số 0.
Rob Kinyon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.