序列化一个javascript数组

时间:2012-06-24 19:41:16

标签: javascript json

我观察到在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就像我想要的那样。我必须对阵列做什么才能取消括号?。

3 个答案:

答案 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()调用后修剪括号。