0

Tengo problemas para imprimir el valor de un Json usando Javascript, solo puedo obtener dos datos de todo el json y no mas allá.

esta es mi función:

function  traerDatos() {
    const xhttp = new XMLHttpRequest();

    xhttp.open('GET', 'www/getConsultarOperaciones.php');
    xhttp.send();

    xhttp.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {
            let datos = JSON.parse(this.responseText);
            console.log(datos);

            for (let item in datos) {                
               console.log(item);   

            }

        }
    };
}

Este es el contenido de mi json:

{
    "resultado": {
        "error": false,
        "codigo": null,
        "mensaje": "Consulta exitosa!",
        "habilitarContingente": false,
        "habilitarSiguienteFormulario": true,
        "idTransaccion": null
    },
    "operaciones": [{
        "CMP_IDENTIFICACION": "0912643061",
        "CMP_NOMBRES": "JIMENEZ BUENO NARCISA DE JESUS",
        "CMP_OPERACION_CREDITO": "105806004526700",
        "CMP_CIUDAD": "DAULE",
        "CMP_CANAL": "ALMACENES ORVE",
        "CMP_AGENCIA": "ORVE DAULE",
        "CMP_PLAZO": "36",
        "CMP_CUOTAS_PAGADAS": "5",
        "CMP_CUOTAS_IMPAGAS": "1",
        "CMP_ESTADO": "VIGENTE",
        "CMP_VALOR_REFINANCIACION": "15.00",
        "CMP_CUOTAS_POR_VENCER": "30",
        "CMP_MOLNTO": "2593.29",
        "CMP_SALDO": "2291.11"
    }]
}

Y solo puedo imprimir en consola: resultado y operaciones, pero no el contenido de los arreglos.

Rubén
  • 10,857
  • 6
  • 35
  • 79
  • [JSON != Objeto](https://es.stackoverflow.com/questions/164943/cu%c3%a1l-es-la-diferencia-entre-json-y-un-objeto-en-javascript) – JackNavaRow Jun 05 '20 at 14:28
  • Mira [ask] para que tu pregunta sea mejor recibida. También, aprovecha y haz el [tour] para entender mejor cómo funcionamos y de paso obtener tu primera [medalla](https://es.stackoverflow.com/help/badges)! – gbianchi Jun 05 '20 at 17:44

2 Answers2

1

En los comentarios explico cómo acceder en cada caso, ya sea que lo quieras hacer por ciclo o directamente:

let datos = { "resultado": { "error": false, "codigo": null, "mensaje": "Consulta exitosa!", "habilitarContingente": false, "habilitarSiguienteFormulario": true, "idTransaccion": null }, "operaciones": [{ "CMP_IDENTIFICACION": "0912643061", "CMP_NOMBRES": "JIMENEZ BUENO NARCISA DE JESUS", "CMP_OPERACION_CREDITO": "105806004526700", "CMP_CIUDAD": "DAULE", "CMP_CANAL": "ALMACENES ORVE", "CMP_AGENCIA": "ORVE DAULE", "CMP_PLAZO": "36", "CMP_CUOTAS_PAGADAS": "5", "CMP_CUOTAS_IMPAGAS": "1", "CMP_ESTADO": "VIGENTE", "CMP_VALOR_REFINANCIACION": "15.00", "CMP_CUOTAS_POR_VENCER": "30", "CMP_MOLNTO": "2593.29", "CMP_SALDO": "2291.11" }] };

// Acceder a todos los datos
for(let dato in datos) {
    // datos.resultado y datos.operaciones
    for(let i in datos[dato]) {
        // Acceder a cada elemento de resultados y operaciones, según el primer ciclo
        console.log(i, datos[dato][i]);
    }
}
// Acceder a cada elemento de resultados
for(let i in datos.resultado[0]) {
    console.log(i, datos.resultado[0][i]);
}
// Acceder a cada elemento de operaciones
for(let i in datos.operaciones) {
    console.log(i, datos.operaciones[i]);
}
// Acceder a un elemento específico
console.log(datos.resultado.mensaje);
// Operaciones solo tiene un array
// Acceder a un elemento específico de operaciones
console.log(datos.operaciones[0].CMP_CIUDAD);
// O bien:
console.log(datos['operaciones'][0]['CMP_CIUDAD']);
Triby
  • 23,274
  • 3
  • 13
  • 35
  • Quizás tu ejemplo resulte más claro si en lugar de convertir "mágicamente" el JSON en un objeto, usas `JSON. parse` para ello – Rubén Jun 05 '20 at 00:57
0

La sentencia for...in itera sobre las llaves del objeto. Por lo que los valores de item en tu codigo seran solo los strings "resultado" y "operaciones".

Muy probablemente la estructura del json ya la conoces asi que deberias acceder directamente a datos.resultado y datos.operaciones respectivamente.

Klaimmore
  • 3,965
  • 1
  • 8
  • 26