Різниця між json.js та json2.js


87

Хтось може сказати мені, яка різниця між 2 парсерами JSON?

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

У мене є файл JSON від 13.04.2007 (у ньому є такі методи, як parseJSON). Я не бачу цих методів у жодній із нових версій.


2
Ви можете знайти новий файл тут github.com/douglascrockford/JSON-js
Даніель Літтл

1
Будь-хто, хто прийшов до цього питання, задаючись питанням про те, що це за файли, знає, що немає причин використовувати їх у сучасних браузерах. З репозитарію GitHub : "У поточних браузерах [json2.js] нічого не робить, віддаючи перевагу вбудованому об'єкту JSON. Немає жодних причин використовувати цей файл, якщо доля не змусить вас підтримувати IE8, що ніхто не повинен ніколи доведеться робити ще раз ".
Thunderforge

Відповіді:


59

З їх коду:

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

Я думаю, parseJSON застарів, тому нова версія (json2) навіть більше не використовує його. Однак якщо ваш код використовує parseJSONбагато, ви можете просто додати цей фрагмент коду кудись, щоб він знову запрацював:

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

1
Дякуємо, отже, видається, що parseJSON замінено на JSON.parse? Крім того, як щодо toJSONString? Наш існуючий код використовує багато таких методів: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()

1
Потім також додайте 1-ю частину коду, усі вказані вами значення є Об'єктами, тому всі вони будуть перетворені для використання JSON.stringify автоматично.
Luca Matteis

Дякую! Я спробую це. Отже, чи можу я додати ці функції до файлу json.js?

"застарілий" - абсолютний чи застарілий?
Ерік

84
"застарілий" - коли він точно застарів.
davidtbernal

31

Цитую тут :

"JSON2.js - Наприкінці минулого року Крокфорд тихо випустив нову версію свого JSON API, який замінив його існуючий API. Важливою відмінністю було те, що він використовував єдиний базовий об'єкт".


25

Я також помітив, що json2 розшифрував масиви інакше, ніж json2007.

У json2007:

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

У json2:

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

4
json2 правильний у цьому випадку. json2007 помилився, проігнорувавши перший елемент з індексом 0.
Роб Кіньйон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.