Diferencia entre json.js y json2.js

87

¿Alguien puede decirme cuál es la diferencia entre los 2 analizadores JSON?

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

Tengo un archivo JSON de 2007-04-13 (tiene métodos como parseJSON). No veo estos métodos en ninguna de las nuevas versiones.

Yi Jiang
fuente
2
Puede encontrar el nuevo archivo aquí github.com/douglascrockford/JSON-js
Daniel Little
1
Cualquiera que haya llegado a esta pregunta preguntándose qué son estos archivos, debe saber que no hay razón para usarlos en los navegadores modernos. Del repositorio de GitHub : "En los navegadores actuales, [json2.js] no hace nada, prefiere el objeto JSON integrado. No hay razón para usar este archivo a menos que el destino te obligue a admitir IE8, que es algo que nadie debería tengo que hacer de nuevo ".
Thunderforge

Respuestas:

59

De su código:

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

Supongo que parseJSON está obsoleto, por lo tanto, la nueva versión (json2) ni siquiera lo usa más. Sin embargo, si su código usa parseJSONmucho, simplemente puede agregar este fragmento de código en algún lugar para que funcione nuevamente:

    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };
Luca Matteis
fuente
1
Gracias, entonces parece que parseJSON ha sido reemplazado por JSON.parse? Además, ¿qué pasa con toJSONString? Nuestro código existente utiliza muchos de estos métodos: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()
1
Luego, agregue también la primera pieza de código, todos los valores que especificó son Objetos, por lo tanto, todos se convertirán para usar JSON.stringify automáticamente.
Luca Matteis
¡Gracias! Le daré una oportunidad a esto. Entonces, ¿puedo agregar estas funciones al archivo json.js?
"absolete" - ¿absoluto u obsoleto?
Eric
84
"absolete" - cuando es definitivamente obsoleto.
davidtbernal
31

Citando aquí :

"JSON2.js: a fines del año pasado, Crockford lanzó silenciosamente una nueva versión de su API JSON que reemplazó su API existente. La diferencia importante fue que usó un único objeto base".

paxdiablo
fuente
25

También noté que json2 agrupaba las matrices de manera diferente a json2007.

En json2007:

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

En json2:

var array = [];
array[1] = "apple";
array[2] = "orange";
alert(JSON.stringify(array)); // Output: [null, "apple", "orange"].
Vimil Saju
fuente
4
json2 es correcto en este caso. json2007 se equivocó al ignorar el primer elemento en el índice 0.
Rob Kinyon