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_2
etc. 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.