JSON.stringify不';无法使用普通Javascript数组

JSON.stringify不';无法使用普通Javascript数组,javascript,json,Javascript,Json,我必须在这里缺少一些内容,但以下代码()返回一个空字符串: var test = new Array(); test['a'] = 'test'; test['b'] = 'test b'; var json = JSON.stringify(test); alert(json); JSON使用此数组的正确方式是什么?JavaScript数组设计用于保存带有数字索引的数据。您可以向它们添加命名属性,因为(当您想要存储关于包含普通、有序、数字索引数据的数组的元数据时,这会很有用),但这不是它们的

我必须在这里缺少一些内容,但以下代码()返回一个空字符串:

var test = new Array();
test['a'] = 'test';
test['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);

JSON使用此数组的正确方式是什么?

JavaScript数组设计用于保存带有数字索引的数据。您可以向它们添加命名属性,因为(当您想要存储关于包含普通、有序、数字索引数据的数组的元数据时,这会很有用),但这不是它们的设计目的

JSON数组数据类型在数组中不能有命名键

将JavaScript数组传递给
JSON.stringify
时,命名属性将被忽略

如果需要命名属性,请使用对象,而不是数组

const test={};//对象
test.a=‘test’;
test.b=[];//排列
测试b.推送(“项目”);
测试b.推送(“项目2”);
测试b.推送(“第3项”);
test.b.item4=“A值”//被JSON.stringify忽略
const json=json.stringify(测试);
log(json)我发布了一个修复程序

您可以使用此函数修改
JSON.stringify
来编码
数组
,只需将其贴在脚本开头附近即可(查看上面的链接了解更多详细信息):


很好的解释和上面的例子。我找到了这个()来完成答案。有些站点使用JSONFilters实现自己的toJSON,所以请删除它

if(window.Prototype) {
    delete Object.prototype.toJSON;
    delete Array.prototype.toJSON;
    delete Hash.prototype.toJSON;
    delete String.prototype.toJSON;
}
工作正常,测试输出:

console.log(json);
结果:

"{"a":"test","b":["item","item2","item3"]}"

Json必须有键值对。但是仍然可以使用数组作为值部分。因此,使用以下方法添加您选择的“密钥”:


var json=json.stringify({whatver:test})

或者,您可以这样使用

var test = new Array();
test[0]={};
test[0]['a'] = 'test';
test[1]={};
test[1]['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);
这样您就可以创建一个数组。

另一种方法是。您可以将第二个参数传递给
JSON.stringify()
,该参数对空数组具有特殊处理,如下所示

const arr=new Array();
arr.answer=42;
//{“你好”:“世界”,“啊”:{“回答”:42}
stringify({hello:'world',arr},函数替换(key,value){
if(Array.isArray(value)&&value.length==0){
返回{…value};//将具有字符串属性的空数组转换为POJO
}
返回值;
});

这不是一个数组,您只需设置两个属性,即使用
var test={}启动的可能重复项
Instedi对覆盖日期的站点有一些问题,所以当我使用Date.toJSON失败时,我添加了:Date.prototype.toJSON=Date.prototype.toISOString;这是错误的<代码>JSON.stringify([15,12])
将起作用。它将给出
“[15,12]”
,但如果我使用对象,它没有像splice这样的数组原型。@Michael-也许你应该问一个新问题,在这个问题中你解释了你的问题,出于某种原因,你需要将带有命名属性的对象拼接到需要字符串化为JSON的对象上。这是一个很好的开始,但是它做了一些假设,例如,数组没有任何索引值。
var test = new Array();
test[0]={};
test[0]['a'] = 'test';
test[1]={};
test[1]['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);