我想在 json 中序列化一个非关联数组,输出非常令人不安
JSON.stringify([1]);
// Expected : "[1]"
Output : "\"[1]\""
它将数组视为字符串,我错过了什么?
我正在使用 Chrome 版本 29.0.1547.65
我想在 json 中序列化一个非关联数组,输出非常令人不安
JSON.stringify([1]);
// Expected : "[1]"
Output : "\"[1]\""
它将数组视为字符串,我错过了什么?
我正在使用 Chrome 版本 29.0.1547.65
您看到的问题是因为 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;
}