Diferença entre json.js e json2.js

87

Alguém pode me dizer qual é a diferença entre os 2 analisadores JSON?

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

Eu tenho um arquivo JSON de 13/04/2007 (ele tem métodos como parseJSON). Não vejo esses métodos em nenhuma das novas versões.

Yi Jiang
fonte
2
Você pode encontrar o novo arquivo aqui github.com/douglascrockford/JSON-js
Daniel Little
1
Para qualquer pessoa que se perguntou o que são esses arquivos, saiba que não há razão para usá-los em navegadores modernos. Do repositório GitHub : "Nos navegadores atuais, [json2.js] não faz nada, preferindo o objeto JSON integrado. Não há razão para usar este arquivo, a menos que o destino obrigue você a oferecer suporte ao IE8, algo que ninguém deveria jamais tem que fazer de novo. "
Thunderforge

Respostas:

59

Do código deles:

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

Acho que parseJSON está obsoleto, portanto, a nova versão (json2) nem o usa mais. No entanto, se o seu código usa parseJSONmuito, você pode simplesmente adicionar esse trecho de código em algum lugar para fazê-lo funcionar novamente:

    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };
Luca Matteis
fonte
1
Obrigado, então parece que parseJSON foi substituído por JSON.parse? Além disso, que tal toJSONString? Nosso código existente usa muitos destes métodos: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()
1
Em seguida, adicione também a 1ª parte do código, todos os valores especificados são Objetos, portanto, todos serão convertidos para usar JSON.stringify automaticamente.
Luca Matteis
Obrigado! Vou tentar. Então, posso adicionar essas funções ao arquivo json.js?
"absolete" - absoluto ou obsoleto?
Eric de
84
"absolete" - quando é definitivamente obsoleto.
davidtbernal
31

Citando aqui :

"JSON2.js - No final do ano passado, Crockford lançou discretamente uma nova versão de sua API JSON que substituiu sua API existente. A diferença importante era que ela usava um único objeto de base."

paxdiablo
fonte
25

Eu também notei que as matrizes sequenciadas do json2 diferentemente do json2007.

Em json2007:

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

Em json2:

var array = [];
array[1] = "apple";
array[2] = "orange";
alert(JSON.stringify(array)); // Output: [null, "apple", "orange"].
Vimil Saju
fonte
4
json2 está correto neste caso. json2007 errou ao ignorar o primeiro elemento no índice 0.
Rob Kinyon