1
var DTO = [];

$.each(data.Foobars, function(i, val){
    DTO.push(val);
});

//example of a stringified object in the array:
// var val = {"a":"1","b":"2","c":"3"};

var jsonString = JSON.stringify(DTO); 

如果数组中有一个对象,“jsonString”将如下所示:

[{"a":"1","b":"2","c":"3"}]

不止一个:

[[{"a":"1","b":"2","c":"3"}, {"a":"1","b":"2","c":"3"}]]

导致出现双括号,这导致我在服务器端出现一些问题。

我怎样才能摆脱双括号?谢谢

4

3 回答 3

4

您确定val对象本身不是数组吗?

在我的小测试中:http://jsfiddle.net/NatJS/, JSON.stringify 工作得很好。

更新:如果val是数组,需要适当对待,如:http: //jsfiddle.net/NatJS/1/

var a = [{ a: 1, b: 2, c: 3},{ d: 10, e: 11, f: 12}];
//var a = { a: 1, b: 2, c: 3}
var j = [];


if (a.length) { // cheap way to check if a an an array; implement something like mooTools.typeOf if you want something more robust
    while (a.length > 0) {
        j.push(a.pop());               
    }
}
else {
    j.push(a);
}

console.log(JSON.stringify(j));​
于 2012-05-22T12:14:19.840 回答
1

这个评论区太小了。

看一下您的问题的以下简化:

var DTO = [];

DTO.push({"a":"1","b":"2","c":"3"});
DTO.push({"a":"1","b":"2","c":"3"});

console.log(JSON.stringify(DTO));

它将显示:

[{"a":"1","b":"2","c":"3"},{"a":"1","b":"2","c":"3"}]

结论:无论您认为val应该包含什么,它都不是;-)

于 2012-05-22T12:11:46.033 回答
0

检查是否在您的对象上定义了 toJSON。如果它被定义,它可以修改 stringify 的行为。

于 2013-05-21T07:50:07.230 回答