JSON.stringify将值数组转换为字符串

时间:2015-04-14 21:46:50

标签: javascript json

我有一个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的值,并且它还将数组作为字符串返回。

2 个答案:

答案 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\"]"
}