tome la entrada JSON y guárdela en una matriz (javascript)
Frecuentes
Visto 432 veces
0
Tengo una entrada JSON de
{
"Categories": {
"Facets": [{
"count": 1,
"entity": "Company",
"Company": [{
"entity": "Ford Motor Co",
"Ford_Motor_Co": [{
"count": 1,
"entity": "Ford"
}]
}]
}, {
"count": 4,
"entity": "Country",
"Country": [{
"entity": "Germany",
"Germany": [{
"count": 1,
"entity": "Germany"
}],
"currency": "Euro (EUR)"
}, {
"entity": "Italy",
"Italy": [{
"count": 1,
"entity": "Italy"
}],
"currency": "Euro (EUR)"
}, {
"entity": "Japan",
"Japan": [{
"count": 1,
"entity": "Japan"
}],
"currency": "Yen (JPY)"
}, {
"entity": "South Korea",
"South_Korea": [{
"count": 1,
"entity": "South Korea"
}],
"currency": "Won (KRW)"
}]
}, {
"count": 5,
"entity": "Persons",
"Persons": [{
"count": 2,
"entity": "Dodge"
}, {
"count": 1,
"entity": "Dodge Avenger"
}, {
"count": 1,
"entity": "Major League"
}, {
"count": 1,
"entity": "Sterling Heights"
}]
}]
}
}
Necesito obtener los valores para la entidad en cada nivel en una matriz.
[Company, Ford Motor Co, Ford, ....... , Sterling Heights]
Puedo pasar el primer nivel con el código.
for (var k in h.Categories.Facets)
{
alert(h.Categories.Facets[k].entity);
}
¿Cómo llego a través de los niveles internos para obtener los valores de la entidad?
4 Respuestas
1
Debes hacer un foreach en cada entidad. Si sabe cuántos niveles hay, puede anidar bucles. Si no, probablemente debería optar por una función recursiva.
Editar
Función recursiva:
function getEntities(ent)
{
alert(ent);
for (var l in ent)
{
getEntities(ent[l].entity);
}
}
Entonces usa:
for (var k in h.Categories.Facets)
{
getEntities(h.Categories.Facets[k]);
}
¡Buena suerte!
contestado el 03 de mayo de 12 a las 21:05
1
La respuesta recursiva más general:
function getEntities(any) { var entities = []; if ('entity' in any) { entities.push(any.entity); } for (var prop in any) { if (any[prop] instanceof Object && any.hasOwnProperty(prop)) { entities.append(getEntities(any[prop])); } } return entities; } console.log(getEntities(h));
La línea:
if (any[prop] instanceof Object && any.hasOwnProperty(prop)) {
Evita que los números/nulos se bombardeen y any.hasOwnProperty(prop) compensa los marcos que les gusta adjuntar al prototipo de Objeto.
contestado el 03 de mayo de 12 a las 22:05
0
Una forma es escribir un método recursivo que acepte una matriz y extraiga los métodos de ella.
contestado el 03 de mayo de 12 a las 21:05
0
Como se sugiere, puede usar una función recursiva para recorrer todos los combos anidados posibles:
var allEntities = [];
function getEntities(obj)
{
if (obj != null)
{
var entityName = obj["entity"];
alert(entityName);
if (entityName != null)
{
allEntities.push(entityName);
var adjName = entityName.replace(/ /gi, "_");
var entities = obj[adjName];
if (entities != null)
{
for (var e in entities)
{
var innerEntities = getEntities(entities[e]);
for (var inner in innerEntities)
allEntities.push(innerEntities[inner]);
}
}
}
}
}
for (var k in h.Categories.Facets)
{
alert(h.Categories.Facets[k].entity);
getEntities(h.Categories.Facets[k]);
}
alert(allEntities.length);
contestado el 04 de mayo de 12 a las 06:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript arrays json or haz tu propia pregunta.
No estoy familiarizado con las funciones recursivas... Los niveles serán diferentes para cada entrada, así que supongo que no hay otra opción que no sea recursiva... - user1371896