Saltar al contenido

Iterar a través del objeto json anidado array

Esta duda se puede solucionar de variadas formas, pero nosotros te mostramos la que para nosotros es la solución más completa.

Solución:

Ya que myJSONObject.abc contiene una lista de productos, tendría más sentido definir la propiedad abc como un array. Me gusta esto:

var myJSONObject = 

"abc":
    [
        [
            "prod_ver" : "prod 1 ver 1",
            "prod_ver" : "prod 1 ver 2",
        ],
        [
            "prod_ver" : "prod 2 ver 1",
            "prod_ver" : "prod 2 ver 2",
        ],
        [
            "prod_ver" : "prod 3 ver 1",
            "prod_ver" : "prod 3 ver 2",
        ]
    ]
;

Luego puede iterar sobre los productos y sus versiones usando bucles normales:

for(var i = 0; i < myJSONObject.abc.length; i++)

    var product = myJSONObject.abc[i];
    for(var j = 0; j < product.length; j++)
    
        var version = product[j];
    

Puede ir un poco más allá y modificar un poco la estructura de su objeto JSON para que sea más comprensible.

var catalog = 

    "products": [
        
            "name": "prod 1",
            "versions": [
                "ver 1",
                "ver 2"
            ]
        ,
        
            "name": "prod 2",
            "versions": [
                "ver 1",
                "ver 2"
            ]
        
    ]
;

for(var i = 0; i < catalog.products.length; i++)

    var product = catalog.products[i];
    var productName = product.name;
    for(var j = 0; j < product.versions.length; j++)
    
        var version = product.versions[j];
    

myJSONObject.abc es un objeto con keys me gusta prod_1, prod_2etc. Puede recorrer el keys de un objeto usando for-in. Entonces:

var productName;
var productVersionArray;

for (productName in myJSONObject.abc) 
    productVersionArray = myJSONObject.abc[productName];

Tenga en cuenta que el orden de los keys no está definido por la especificación y variará de un motor de JavaScript a otro. Si quieres hacerlos en un orden particular, tienes que conseguir un array de ellos, clasifíquelo en el orden que desee y luego recorra ese array. (En un entorno habilitado para ES5, puede obtener un array de El keys de un objeto de Object.keys(yourObject). Pero necesitaría una cuña para navegadores más antiguos).

Dentro de ese ciclo, puede recorrer el array utilizando un estándar for lazo:

for (versionIndex = 0; versionIndex < productVersionArray.length; ++versionIndex) 
    // Use `productVersionArray[versionIndex].prod_ver` here

Aquí hay un ejemplo poniendo todo junto:

(function() 

  var myJSONObject = 
    
    "abc":
        
            "prod_1": 
            [
                "prod_ver" : "prod 1 ver 1",
                "prod_ver" : "prod 1 ver 2"
            ],

            "prod_2": 
            [
                "prod_ver" : "prod 2 ver 1",
                "prod_ver" : "prod 2 ver 2"
            ],
            "prod_3": 
            [
                "prod_ver" : "prod 3 ver 1",
                "prod_ver" : "prod 3 ver 2"
            ]
        
    ;

  var productName;
  var productVersionArray;
  var versionIndex;

  for (productName in myJSONObject.abc) 
      productVersionArray = myJSONObject.abc[productName];
      display(productName + " has " + productVersionArray.length + " versions listed");
      for (versionIndex = 0; versionIndex < productVersionArray.length; ++versionIndex) 
        display("* " + productVersionArray[versionIndex].prod_ver);
      
  

  function display(msg) 
    var p = document.createElement('p');
    p.innerHTML = String(msg);
    document.body.appendChild(p);
  

)();

Copia en vivo | Fuente

Recuerda que tienes la opción de añadir un enjuiciamiento justo si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *