Matriz JSON.stringify que da como resultado corchetes dobles

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

Con un objeto en la matriz, el 'jsonString' se vería así:

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

Con más de uno:

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

Resultando en corchetes dobles, lo que me está causando algunos problemas en el servidor.

¿Cómo puedo deshacerme de los corchetes dobles? Gracias

preguntado el 22 de mayo de 12 a las 12:05

¿Te causa más problemas en el lado del servidor? El JavaScriptSerializer no debería tener problemas con eso :) -

¿Has probado console.log(DTO)? -

@mattytommo estoy usando JSON.net y tiene algunos problemas. -

@Jack Sí, ves las versiones en cadena arriba:

@Johan de eso viene JSON.stringify(); pero has inspeccionado el valor de DTO en la consola? -

3 Respuestas

¿Estás seguro de que val objeto no es una matriz en sí mismo?

En mi pequeña prueba: http://jsfiddle.net/NatJS/, JSON.stringify funciona bien.

Actualizar: if val es una matriz, debe tratarla adecuadamente, como: 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));​

contestado el 22 de mayo de 12 a las 13:05

Véame actualizar arriba, debe verificar el tipo de val y tratarlo adecuadamente. Si está insertando una matriz en una matriz, JSON.stringify se comporta exactamente como debería :) - Thach mai

Usé typeof para verificar si era una matriz. Debería haber usado $.isArray. Lo resolvió con jquerys $.makeArray (solo hace uno si es necesario). Gracias - Johan

El área de comentarios es demasiado pequeña para esto.

Eche un vistazo a la siguiente simplificación de su problema:

var DTO = [];

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

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

Mostrará:

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

Conclusión: lo que sea que pienses val debería contener no lo es ;-)

contestado el 22 de mayo de 12 a las 13:05

Mi problema parece ser que si data.Foobars.length == 1, entonces val contendrá los valores del objeto. 1,2,3. Pero si hay más de un objeto, val será el objeto completo... - Johan

Compruebe si toJSON está definido en su objeto. Si está definido, puede modificar el comportamiento de stringify.

contestado el 21 de mayo de 13 a las 08:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.