leyendo el elemento JSON usando JS

Recibo un objeto JSON de una solicitud de obtención de PHP. Se parece a esto:

data == {"user_id":"7","emp_type_id":[{"0":"11","1":"10"}]}

Necesito acceder a los elementos dentro de emp_type_id ("11" y "10" en este caso).

Puedo acceder a user_id sin problemas usando datos ["user_id"] pero no puedo averiguar cómo obtener los otros elementos. Probé variaciones de:

eti=data["emp_type_id"];
var myVar = eti[0];

Querré recorrer todos los elementos en emp_type_id eventualmente y agregarlos a una matriz JS.

preguntado el 16 de mayo de 11 a las 20:05

5 Respuestas

La respuesta de Neal ayudará, pero creo que tiene otros problemas. Tu estructura json se ve mal

a) data == {"user_id":"7","emp_type_id":[{"0":"11","1":"10"}]}

deberia ser

b) data == {"user_id":"7","emp_type_id":["11","10"]}

Eso esta en ingles

a) emp_type_id una matriz de un objeto que tiene dos campos 0 y 1?

b) emp_type_id una matriz de dos elementos con valores 11 y 10

Si debería ser b), entonces su json está equivocado.

contestado el 17 de mayo de 11 a las 00:05

Es posible que desee reformular eso: el JSON no es 'incorrecto', puede ser innecesario, ineficiente o complejo, pero ciertamente es válido. - no.good.at.coding

hmm supongo que debería ser b). De hecho, tuve eso para comenzar, pero luego, cuando no pude averiguar cómo obtener esos valores (pensé que podrían necesitar una clave), pensé que estaba mal y lo cambié a la otra versión (json_encode ($ emp_type_id, JSON_FORCE_OBJECT ); frente a json_encode ($ emp_type_id);). ¿Esto cambia la forma en que accedo a esos valores? - uve

@ no.go - OK, lo cambié "+ estructura" activada. - Hogan

No está mal sintácticamente, pero el OP podría haber tenido algo más en mente ... - Dan Manastireanu

@vee - ¡sí que lo hace! Si es una matriz, como se muestra en b), entonces solo es emp_type_id [x] para el elemento x. Si no, entonces se vuelve loco. Vea la respuesta de @James para más información sobre esto. - Hogan

Usar una para en loops

var data = {"user_id":"7","emp_type_id":[{"0":"11","1":"10"}]};
var eti = data["emp_type_id"];
var myVar = eti[0];
for(var entry in myVar){
  alert(entry + ":\t" + myVar[entry] );
}

Ejecución de ejemplo JSBIN

contestado el 17 de mayo de 11 a las 00:05

Esto funcionará, pero creo que es mejor si corrige su JSON como sugirió Hogan en su publicación. - Dan Manastireanu

data es un objeto que tiene dos propiedades, user_id y emp_type_id. emp_type_id es una matriz con un elemento (???), ese elemento es un objeto con las propiedades 0 y 1.

Hay dos formas de leer una propiedad de un objeto:

var prop = data['emp_type_id'];
var prop = data.emp_type_id;

Si tiene nombres de propiedad "raros", entonces tendrá que usar la técnica del corchete.

so

var prop0 = data.emp_type_id[0].0;
var prop1 = data.emp_type_id[0].1;

Me preocupa que "0" y "1" se incluyan en la categoría de "nombres de propiedad extraños", por lo que es posible que deba hacer

var prop0 = data.emp_type_id[0]["0"];
var prop1 = data.emp_type_id[0]["1"];

contestado el 17 de mayo de 11 a las 00:05

+1: esta respuesta deja en claro qué estaba semánticamente mal con el json que estaba usando. - Hogan

Prueba esto:

var eti = data.emp_type_id;
var myVar = eti[0];

contestado el 17 de mayo de 11 a las 00:05

var eti = data.emp_type_id;
var myVar = eti[0];

for(var key in myVar){
    myVar[key];
}

contestado el 17 de mayo de 11 a las 00:05

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