3

我观察到,在 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,就像我想要的那样。我必须对我的数组做什么才能去掉括号?

4

3 回答 3

2

javascript 中的数组 ( []) 和对象 ( )是有区别的。{}您的第一个示例使用数组。您的第二个示例使用了一个对象。主要区别在于,当您有一个数组 ( []) 时,索引只能是从零开始的整数。而对象可以具有字符串的属性名称。

于 2012-06-24T19:44:22.853 回答
1

第一个示例中数组["Toyota","Mercedes","BMW"]的正确 JSON 是 ,第二个示例中对象的正确 JSON 是{"bar":"new property","baz":3}or {"baz":3,"bar":"new property"}

JSON 字符串包含一个对象或一个数组,因此它总是包含大括号{}或方括号[]

如果你得到其他任何东西,结果是不正确的。如果你期望别的,你的期望是错误的。

如果你想要大括号而不是方括号,你必须序列化一个对象,而不是一个数组。

于 2012-06-24T19:49:10.077 回答
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() 调用后去掉括号即可。

于 2012-06-24T20:03:13.093 回答