2009-02-16 4 views
80

Kann mir jemand sagen, was der Unterschied zwischen den 2 JSON-Parsern ist?Unterschied zwischen json.js und json2.js

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

ich eine JSON-Datei von 2007-04-13 haben (es hat Methoden wie parseJSON). Ich sehe diese Methoden in keiner der neuen Versionen.

+2

Sie können die neue Datei finden hier https://github.com/douglascrockford/JSON-js –

+0

Für alle, die dazu kam Fragen Sie sich darüber, was diese Dateien sind, wissen Sie, dass es keinen Grund gibt, sie in modernen Browsern zu verwenden. Aus dem [GitHub-Repo] (https://github.com/douglascrockford/JSON-js): "Auf aktuellen Browsern tut [json2.js] nichts und bevorzugt das integrierte JSON-Objekt. Es gibt keinen Grund, dies zu verwenden Datei, es sei denn, das Schicksal zwingt Sie, IE8 zu unterstützen, was niemand jemals wieder tun sollte. " – Thunderforge

Antwort

56

Von 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 veraltet ist, damit die neue Version (json2) ist es gar nicht mehr verwenden. Allerdings, wenn Ihr Code parseJSON viel verwendet, könnte man gerade dieses Stück Code hinzufügen, irgendwo, damit es wieder funktioniert:

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

Danke, so scheint es, dass parseJSON durch JSON.parse ersetzt wurde? Auch, was ist mit toJSONString? Unsere bestehenden Code viele dieser Methoden verwendet: boolean.toJSONString() date.toJSONString() number.toJSONString() object.toJSONString() string.toJSONString() –

+0

dann auch das erste Stück Code hinzufügen, Alle von Ihnen angegebenen Werte sind Objekte, daher werden sie alle so konvertiert, dass sie JSON.stringify automatisch verwenden. –

+0

Danke! Ich werde es versuchen. Kann ich diese Funktionen zur json.js-Datei hinzufügen? –

30

Zitiert here:

„json2.js - Ende letztes Jahr Crockford leise einen neuen frei Version seiner JSON-API, die seine bestehende API ersetzte. Der wichtige Unterschied war, dass ein einziges Basisobjekt verwendet wurde. "

20

Ich bemerkte auch, dass json2 Arrays anders als json2007 stringifiziert.

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

json2 ist in diesem Fall richtig. json2007 hat das erste Element bei Index 0 falsch ignoriert. –

Verwandte Themen