Разница между 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.