我有一个JS对象
{
aString:[aNumber, aURL]
}
JSON.stringify()返回
{
"aString":"[number, \"aURL\"]"
}
我认为有效的JSON可以将数组作为值。我可以使用stringify返回JSON字符串而不将数组转换为字符串吗?基本上我需要将整个JS对象直接转换为字符串,不做任何修改。
有更好的方法吗?我一直在环顾四周,但如果我想要一个字符串的对象,每个人都建议使用JSON.stringify,并且没有人提出这个问题。
编辑:感谢您的快速回复。以下是我创建JS对象的方法,如果我搞砸了,请告诉我,以及如何!
cookie = {};
// productURL is a string, timer is a number, imageSrc is a URL string
cookie[productURL] = [timer, imageSrc];
// then, I just stringified cookie
newCookie = JSON.stringify(cookie);
如果它也相关,我将实际的cookie值设置为生成的JSON字符串,以便在另一组函数中访问它。设置cookie的值确实会对自己进行一些URI编码,但我实际上也在Chrome控制台中获取了newCookie的值,并且它还将数组作为字符串返回。
答案 0 :(得分:9)
如果您尝试进行字符串化的对象具有toJSON
函数,则JSON.stringify
将调用该函数。很可能你有一个外部库,它正在添加Array.prototype.toJSON。
例如,Prototype JS的旧版本(1.6)将“方便地”为您添加。
原型1.6.1 :
alert(JSON.stringify([1, 2, 3]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.6.1/prototype.min.js"></script>
而新版本不会。
原型1.7.2 :
alert(JSON.stringify([1, 2, 3]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.min.js"></script>
您可以尝试删除Array.prototype.toJSON
,看看是否是导致问题的原因。如果是,您可能需要考虑升级/弃用代码中的任何类似奇怪的库。
原型1.6.1(删除toJSON
后)
delete Array.prototype.toJSON;
alert(JSON.stringify([1, 2, 3]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.6.1/prototype.min.js"></script>
答案 1 :(得分:0)
根据您的描述,这不是应该发生的事情。
如果你有这样的代码:
var obj = {
aString:[123, "test"]
}
document.getElementById("out").value = JSON.stringify(obj);
它将生成预期的json:
{"aString":[123,"test"]}
另见https://jsfiddle.net/zudrrc13/
为了产生输出,原始对象必须看起来像:
var obj = {
aString:"[123, \"test\"]"
}