Unterschied zwischen json.js und json2.js

86

Kann mir jemand sagen, was der Unterschied zwischen den beiden JSON-Parsern ist?

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

Ich habe eine JSON-Datei vom 2007-04-13 (Es hat Methoden wie parseJSON). Ich sehe diese Methoden in keiner der neuen Versionen.

Yi Jiang
quelle
2
Sie finden die neue Datei hier github.com/douglascrockford/JSON-js
Daniel Little
1
Wenn Sie sich mit dieser Frage befassen, was diese Dateien sind, wissen Sie, dass es keinen Grund gibt, sie in modernen Browsern zu verwenden. Aus dem GitHub-Repo : "In aktuellen Browsern tut [json2.js] nichts und bevorzugt das integrierte JSON-Objekt. Es gibt keinen Grund, diese Datei zu verwenden, es sei denn, das Schicksal zwingt Sie, IE8 zu unterstützen, was niemand jemals tun sollte muss nochmal machen. "
Thunderforge

Antworten:

58

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

Ich denke, parseJSON ist veraltet, daher verwendet es die neue Version (json2) nicht einmal mehr. Wenn Ihr Code jedoch parseJSONviel verwendet, können Sie diesen Code einfach irgendwo hinzufügen, damit er wieder funktioniert:

    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };
Luca Matteis
quelle
1
Danke, also scheint es, dass parseJSON durch JSON.parse ersetzt wurde? Und was ist mit toSONString? Unser vorhandener Code verwendet viele dieser Methoden: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()
1
Fügen Sie dann auch den ersten Code hinzu. Alle von Ihnen angegebenen Werte sind Objekte. Daher werden sie alle konvertiert, um JSON.stringify automatisch zu verwenden.
Luca Matteis
Vielen Dank! Ich werde es versuchen. Kann ich diese Funktionen zur Datei json.js hinzufügen?
"absolut" - absolut oder veraltet?
Eric
83
"absolut" - wenn es definitiv veraltet ist.
Davidtbernal
31

Zitiert von hier :

"JSON2.js - Ende letzten Jahres veröffentlichte Crockford leise eine neue Version seiner JSON-API, die seine vorhandene API ersetzte. Der wichtige Unterschied bestand darin, dass ein einzelnes Basisobjekt verwendet wurde."

paxdiablo
quelle
24

Mir ist auch aufgefallen, dass json2 Arrays anders als json2007 stringifiziert hat.

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"].
Vimil Saju
quelle
4
json2 ist in diesem Fall korrekt. json2007 war falsch, das erste Element bei Index 0 zu ignorieren.
Rob Kinyon