Разница между 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. Важным отличием было то, что он использовал единственный базовый объект».


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.