entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Como quitar de un json la contrabarra

Buenos días, tengo un proplemilla desde hace tres días y no logro solucionarlo seguro que es una tontería pero me he quedado atascado.
tengo este json

"{\"usuarios\":[{\"password\":\"1234\",\"id\":\"35\",\"email\":\"oscar\"}]}\r\n" 

y estoy intentado pasarlo por un $.each simplemente para sacar el mail.

$.each(json.usuarios,function(i,item){
alert(item.email); });

y en la consola me da este error.

Uncaught TypeError: Cannot read property 'length' of undefined.

creo que es por el tema de la contrabarra del usuario y no se como quitarlas..... :-(

Muchas gracias por la ayuda.

1 Respuesta

1voto

white Puntos75880

No creo sea problema del caracter que dices, me parece que talvez no interpretaste json en el objeto json y la propiedad usuarios, estas seguro que la propiedad usuarios es un objeto y no un string?

si es una cadena intenta transformarla a un objeto con JSON.parse():

$.each(JSON.parse(json.usuarios),function(i,item)
{
    // ...

ó si recibes el json por ajax intenta definir en la cabecera de respuesta el tipo de contenido como application/json.

adicionalmente reviza que json.usuarios tenga un valor deseado, observa en tu consola:

console.log(json.usuarios);

0voto

oscar comentado

Gracias, por la respuesta pero sigue igual, he probado a realizar distintos experimentos pero naaaa, he metido un alert y si que coge el json perfectamente. Te paso el código para que lo veas por si ves algo que se me ha pasado. Muchas gracias por tu ayuda.

$(document).ready(main);

var urlComprobarUsuario ="http://localhost:8080/RedSocial/ComprobarUsuario2";

function main() {

    numInputs=$("form").children("input").length; //obtengo el número de inputs del form
    $(".btn").on("click",comprobarUsuario); //ponemos al botón el evento on click

}

//funciona para conectar con el serblet
function comprobarUsuario() {
    //para conectar con el serblet
    localStorage.clear();
    //enviamos los datos a java
    $.post(urlComprobarUsuario, $("form").serialize(), function (json) {
    //guardamos el json en local.  
          var datos = JSON.stringify(json);
          localStorage.setItem("datos",datos);
          alert(json.usuarios); //resultado correcto -->"{"usuarios":[{"password":"1234","id":"35","email":"oscar"}]}\r\n"
          //recorremos el json, hay da el fallo -->  Uncaught TypeError: Cannot read property 'length' of undefined
    $.each(json.usuarios,function(i,item){
            alert(i+" "+item.id);

        });
    });
}

0voto

white comentado

veamos, es posible que el tipo de contenido que regresa $.post es text o html.

intentaste usar datos en la funcion $.each y definir el 4to parametro de $.post como 'json' ?

$.post(urlComprobarUsuario, $("form").serialize(), function (json) {
// ...
    $.each(datos.usuarios, function(i,item)
    {

    });
// ....
}, 'json');

intenta agregar el codigo del lado del servidor, como imprimes el json en http://localhost:8080/RedSocial/ComprobarUsuario2 ?

PD: no me había fijado en que parte tenias escapadas las comillas, para evitarlo intenta agregar el codigo del lado del servidor para saber como imprimes el json, en javascript bastaría con:

json = JSON.parse(json.replace(/\\"/g, '"'));

pero deberías controlarlo en el servidor.

0voto

oscar comentado

MUCHAS GRACIAS , ME ESTABA VOLVIENDO LOCO. GRACIAS POR LA SOLUCION.

LO HE SOLUCIONADO, TENIA QUE METER EL JSON EN UNA VARIABLE Y LUEGO HACERLE UN PARSE. :-) Y YA ME FUNCIONA PERFECTAMENTE.

 var datos = JSON.stringify(json);
 var obj =json;
 obj = JSON.parse(obj);
 alert(obj);
 localStorage.setItem("datos",datos);

 //recorremos el json, 
 $.each(obj.usuarios,function(i,item){
 alert(i+" "+item.id); menos...

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta