Différence entre json.js et json2.js

87

Quelqu'un peut-il me dire quelle est la différence entre les 2 analyseurs JSON?

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

J'ai un fichier JSON du 2007-04-13 (il a des méthodes telles que parseJSON). Je ne vois ces méthodes dans aucune des nouvelles versions.

Yi Jiang
la source
2
Vous pouvez trouver le nouveau fichier ici github.com/douglascrockford/JSON-js
Daniel Little
1
Pour quiconque est venu à cette question se demandant ce que sont ces fichiers, sachez qu'il n'y a aucune raison de les utiliser dans les navigateurs modernes. Depuis le dépôt GitHub : "Sur les navigateurs actuels, [json2.js] ne fait rien, préférant l'objet JSON intégré. Il n'y a aucune raison d'utiliser ce fichier à moins que le destin ne vous oblige à prendre en charge IE8, ce que personne ne devrait jamais dois faire à nouveau. "
Thunderforge

Réponses:

59

À partir de leur code:

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

Je suppose que parseJSON est obsolète, donc la nouvelle version (json2) ne l'utilise même plus. Cependant, si votre code en utilise parseJSONbeaucoup, vous pouvez simplement ajouter ce morceau de code quelque part pour le faire fonctionner à nouveau:

    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };
Luca Matteis
la source
1
Merci, il semble donc que parseJSON a été remplacé par JSON.parse? Et qu'en est-il de toJSONString? Notre code existant utilise beaucoup de ces méthodes: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()
1
Ensuite, ajoutez également le 1er morceau de code, toutes les valeurs que vous avez spécifiées sont des objets, elles seront donc toutes converties pour utiliser JSON.stringify automatiquement.
Luca Matteis
Merci! Je veux bien essayer. Alors, puis-je ajouter ces fonctions au fichier json.js?
«absolu» - absolu ou obsolète?
Eric
84
"absolu" - quand il est définitivement obsolète.
davidtbernal
31

Citant ici :

"JSON2.js - À la fin de l'année dernière, Crockford a discrètement publié une nouvelle version de son API JSON qui a remplacé son API existante. La différence importante était qu'elle utilisait un seul objet de base."

paxdiablo
la source
25

J'ai également remarqué que json2 stringifiait les tableaux différemment de json2007.

Dans json2007:

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

Dans json2:

var array = [];
array[1] = "apple";
array[2] = "orange";
alert(JSON.stringify(array)); // Output: [null, "apple", "orange"].
Vimil Saju
la source
4
json2 est correct dans ce cas. json2007 a eu tort d'ignorer le premier élément à l'index 0.
Rob Kinyon