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.


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

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."


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"].

4
json2 está correto neste caso. json2007 errou ao ignorar o primeiro elemento no índice 0.
— Rob Kinyon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.