我观察到在php中你可以编码一个数组,结果json不带方括号。但是,在我的javascript数组中,
var arrCars = new Array("Toyota", "Mercedes", "BMW");
var jsonStr = JSON.stringify(arrCars);
alert(jsonStr);
我一直得到方括号。我也注意到如果我使用json stringfy,
var foo = {};
foo.bar = "new property";
foo.baz = 3;
var JSONfoo = JSON.stringify(foo);
我得到了没有正方形的json就像我想要的那样。我必须对阵列做什么才能取消括号?。
答案 0 :(得分:2)
javascript中的数组([]
)和对象({}
)之间存在差异。您的第一个示例使用数组。您的第二个示例使用对象。主要区别在于,当您有一个数组([]
)时,索引只能是一个基于零的整数。而对象的属性名称可以是字符串。
答案 1 :(得分:1)
第一个示例中数组的正确JSON为["Toyota","Mercedes","BMW"]
,第二个示例中对象的正确JSON为{"bar":"new property","baz":3}
或{"baz":3,"bar":"new property"}
。
JSON字符串包含对象或数组,因此它始终具有大括号{}
或方括号[]
。
如果您还有其他任何结果,则结果不正确。如果您还有其他想法,那么您的期望是错误的。
如果你想要大括号而不是方括号,你必须序列化一个对象,而不是一个数组。
答案 2 :(得分:1)
不确定为什么你不想要括号,因为括号是制作数组文字的常规方法(而不是像你一样使用Array()函数,这就像老派一样)
如果你想要没有括号的JSON,比如你要构建一个更大的JSON字符串,你可以使用这样的东西:
function jsonifyArrayWithoutBrackets(a) {
var output = [];
for (var i=0; i<a.length; i++)
output.push(JSON.stringify(a[i]));
return output.join(',');
}
或者,显然,只需在使用一次JSON.stringify()调用后修剪括号。