Differenza tra json.js e json2.js


87

Qualcuno può dirmi qual è la differenza tra i 2 parser JSON?

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

Ho un file JSON del 2007-04-13 (ha metodi come parseJSON). Non vedo questi metodi in nessuna delle nuove versioni.


2
Puoi trovare il nuovo file qui github.com/douglascrockford/JSON-js
Daniel Little,

1
Per chiunque sia arrivato a questa domanda chiedendosi cosa siano questi file, sappi che non c'è motivo di usarli nei browser moderni. Dal repository GitHub : "Nei browser attuali, [json2.js] non fa nulla, preferendo l'oggetto JSON integrato. Non c'è motivo di utilizzare questo file a meno che il destino non ti costringa a supportare IE8, che è qualcosa che nessuno dovrebbe devo fare di nuovo. "
Thunderforge

Risposte:


59

Dal loro codice:

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

Immagino che parseJSON sia obsoleto, quindi la nuova versione (json2) non la usa nemmeno più. Tuttavia, se il tuo codice utilizza parseJSONmolto, potresti semplicemente aggiungere questo pezzo di codice da qualche parte per farlo funzionare di nuovo:

    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };

1
Grazie, quindi sembra che parseJSON sia stato sostituito da JSON.parse? Inoltre, per quanto riguarda toJSONString? Il nostro codice esistente utilizza molti di questi metodi: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()

1
Quindi aggiungi anche il 1 ° pezzo di codice, tutti i valori che hai specificato sono Oggetti, quindi verranno tutti convertiti per utilizzare JSON.stringify automaticamente.
Luca Matteis

Grazie! Lo proverò. Quindi, posso aggiungere queste funzioni al file json.js?

"assoluto": assoluto o obsoleto?
Eric

84
"assoluto" - quando è decisamente obsoleto.
davidtbernal

31

Citando qui :

"JSON2.js - Alla fine dello scorso anno Crockford ha rilasciato silenziosamente una nuova versione della sua API JSON che ha sostituito la sua API esistente. La differenza importante era che utilizzava un singolo oggetto di base."


25

Ho anche notato che json2 stringifica gli array in modo diverso da json2007.

In json2007:

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

In json2:

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

4
json2 è corretto in questo caso. json2007 ha sbagliato a ignorare il primo elemento all'indice 0.
Rob Kinyon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.