JSON.stringify和非关联数组

时间:2013-10-24 16:55:38

标签: javascript json

我想在json中序列化一个非关联数组,输出非常令人不安

JSON.stringify([1]);
// Expected : "[1]"
Output : "\"[1]\""

它将数组视为字符串,我缺少什么?

我使用的是Chrome版本29.0.1547.65

1 个答案:

答案 0 :(得分:3)

您看到的问题是由于Array.prototype.toJSON方法已针对JSON.stringify的语义错误定义。见下文:

来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

  

toJSON行为

     

如果要进行字符串化的对象具有名为toJSON的属性,其值为   是一个函数,然后toJSON方法自定义JSON字符串化   行为:返回的值代替被序列化的对象   通过toJSON方法调用时将被序列化。

当一个对象具有toJSON方法时,该方法的结果将在其位置进行字符串化。如果将toJSON方法定义为字符串化,则该对象将被双重字符串化。

我所知道的唯一解决方法是删除方法或使用与内置语法不同的语义实现自己的stringify()方法。

如果可以,只需从Array.prototype中删除该方法即可。如果您担心这会破坏页面上的其他功能,那么您需要删除它,进行字符串化,然后将其恢复。

function myStringify( o ) {
    var temp = Array.prototype.toJSON;
    delete Array.prototype.toJSON;
    var result = JSON.stringify(o);
    Array.prototype.toJSON = temp;

    return result;
}