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); 

配列に1つのオブジェクトがある場合、「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 に答える