json.js和json2.js之间的区别


87

谁能告诉我2个JSON解析器之间的区别是什么?

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

我有一个2007年4月13日起的JSON文件(其中包含的方法parseJSON)。我没有在任何新版本中看到这些方法。


2
您可以在这里找到新文件github.com/douglascrockford/JSON-js
Daniel Little

1
对于任何想知道这些文件是什么的人,都知道没有理由在现代浏览器中使用它们。来自GitHub存储库:“在当前浏览器上,[json2.js]不执行任何操作,而是使用内置的JSON对象。除非缘分迫使您支持IE8,否则没有理由使用此文件,这是任何人都不应该的必须再次做。”
雷霆堡

Answers:


59

从他们的代码:

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

我猜parseJSON已过时,因此新版本(json2)甚至不再使用它。但是,如果您的代码使用parseJSON很多,则可以将这段代码添加到某个地方以使其再次起作用:

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

1
谢谢,看来parseJSON已被JSON.parse取代了?另外,toJSONString呢?我们现有的代码使用了很多这样的方法:boolean.toJSONString()date.toJSONString()number.toJSONString()object.toJSONString()string.toJSONString()

1
然后还要添加第一段代码,您指定的所有值都是Objects,因此它们将全部转换为自动使用JSON.stringify。
卡·马太斯

谢谢!我将尝试一下。那么,我可以将这些功能添加到json.js文件中吗?

“过时”-绝对还是过时?
埃里克

84
“过时”-绝对过时。
davidtbernal 2011年

31

在这里报价:

“ JSON2.js-去年年底,Crockford悄悄发布了他的JSON API的新版本,该版本取代了他现有的API。重要的区别是它使用了单个基础对象。”


25

我还注意到json2对数组的字符串化与json2007不同。

在json2007中:

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

在json2中:

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

4
在这种情况下,json2是正确的。json2007是错误忽略索引为0的第一个元素
罗布Kinyon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.