数组不是数组

时间:2012-02-17 09:32:16

标签: javascript json

我正在运行

var n = [];
jQuery.toJSON( n );

在一个页面上,我在另一个"[]"上获得""[]""。在这两个页面上,我使用toJson Plugin运行相同的jQuery版本。

在Firefox DOM中我可以看到两个数组具有相同的函数名称,但是......不同:

all     b(B, A)
any     j(B, A)

all     all(iterator, context)
any     any(iterator, context)

我想在我的脚本之前有一些Array.prototype函数。这导致阵列不同。我无法改变其他代码以某种方式解决这个问题。

我尝试了new Array()jQuery.makeArray(n),结果仍然相同。我实际上并不关心数组不相等,但我如何获得相同的JSON代码呢?如果我在数组中有字符串,情况就会变得更糟:""[\"a\", \"b\"]""

2 个答案:

答案 0 :(得分:1)

额外报价由

引起
Array.prototype.toJSON

由Prototype库和可能的其他库定义的函数。此函数由jQuery.toJSON(或JSON.Stringify())调用,并生成额外的引号。如果你愿意的话

delete Array.prototype.toJSON // remove toJSON for all Arrays
//or
delete n.toJSON // remove toJSON for specific Array

在执行jQuery.toJSON之前,这应该有效!



作为另一个建议,最好使用

JSON.stringify(object)

而不是jQuery.toJSON。在大多数浏览器中本机支持它。如果您想确保它在任何地方都有效,请使用https://github.com/douglascrockford/JSON-js,它是JSON.stringify()函数的基础。

对于JSON.stringify(),请参阅https://developer.mozilla.org/En/Using_native_JSON了解详情。

答案 1 :(得分:0)

我对此的肮脏攻击是:

function cleanJson(s)
{
    if (s[0] == '"')
    {
        s = s.substring(1, s.length-1).replace(/\\"/g,'"');
    }
    return s;
}

是否有工作,但我仍在寻找更清洁的解决方案。