我正在运行
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\"]""
答案 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;
}
是否有工作,但我仍在寻找更清洁的解决方案。