Разница между json.js и json2.js

87

Может кто-нибудь сказать мне, в чем разница между двумя парсерами JSON?

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

У меня есть файл JSON от 13 апреля 2007 г. (в нем есть такие методы, как parseJSON). Я не вижу этих методов ни в одной из новых версий.

И Цзян
источник
2
Вы можете найти новый файл здесь github.com/douglascrockford/JSON-js
Daniel Little
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.
Лука Маттеис,
Благодарность! Я попробую. Итак, могу ли я добавить эти функции в файл json.js?
«устаревшее» - абсолютное или устаревшее?
Эрик
84
«устаревший» - когда он определенно устарел.
davidtbernal 04
31

Цитата здесь :

«JSON2.js - В конце прошлого года Крокфорд незаметно выпустил новую версию своего JSON API, которая заменила его существующий API. Важным отличием было то, что он использовал единственный базовый объект».

Paxdiablo
источник
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.
Роб Киньон