Impresión de JSON nested sin usar nombres de variables

un service web devuelve el siguiente object json nested:

{"age":"21-24","gender":"Male","location":"San Francisco, CA","influencer score":"70-79","interests":{"Entertainment":{"Celebrities":{"Megan Fox":{},"Michael Jackson":{}},},"Social Networks & Online Communities":{"Web Personalization": {},"Journals & Personal Sites": {},},"Sports":{"Basketball":{}},},"education":"Completed Graduate School","occupation":"Professional/Technical","children":"No","household_income":"75k-100k","marital_status":"Single","home_owner_status":"Rent"} 

Solo quiero iterar a través de este object sin especificar el nombre de la propiedad, probé el siguiente código:

 for (var data in json_data) { alert("Key:" + data + " Values:" + json_data[data]); } 

sin embargo, imprime el valor como [object Object] si es un valor nested, ¿hay alguna manera de seguir iterando en valores nesteds?

6 Solutions collect form web for “Impresión de JSON nested sin usar nombres de variables”

Prueba esto:

 function iter(obj) { for (var key in obj) { if (typeof(obj[key]) == 'object') { iter(obj[key]); } else { alert("Key: " + key + " Values: " + obj[key]); } } } 

BB: añadido + para evitar errores.

Puedes hacer esto recursivamente.

 function alertobjectKeys(data) { for (var key in data) { if (typeof(data[key]) == "object" && data[key] != null) { alertobjectKeys(data[key]); } else { alert("Key:" + key + " Values:" + data[key]); } } } 

Esto por supuesto requiere recursión

 (function(obj) { for (var key in obj) if (obj.hasOwnProperty(key)) { if (typeof obj[key] == 'object' && obj[key] !== null) arguments.callee(obj[key]); else alert("Key: " + key + " Values: " + obj[key]); } )(json_data)); 
 function recursiveParse(variable) { for (var key in variable) { if ((is_object(variable[key])) || (is_array(variable[key]))) { recursiveParse(variable[key]); } else { // Process variable here } } } 

Luego simplemente llame a esa function con el parámetro que es la información json, analizará los objects restantes y las matrices recursivamente.

Siempre puedes crear una function recursiva:

 function alertObj(obj) { for (var data in obj) { if(typeof(obj[data]) === "object") alertObj(obj[data]); else alert("Key:" + data + " Values:" + obj[data]); } } 

Siempre y cuando no esté preocupado por recurrir demasiado lejos (que probablemente no necesite con objects JSON).

También puede hacer esto con una estructura de queue o stack (matriz):

 function alertObj_queue(obj) { // Breadth-first var arrPrint = [{key:"Object", data:obj}]; // Initialize array with original object for(var i = 0; i < arrPrint.length; i++) { if(typeof(arrPrint[i].data) === "object") { for(var k in arrPrint[i].data) { // Add each to end of array arrPrint.push({key: k, data: arrPrint[i].data[k]}); } alert("Object key: " + arrPrint[i].key); } else { alert("Key:" + arrPrint[i].key + " Values:" + arrPrint[i].data); } } } function alertObj_stack(obj) { // Depth-first var arrPrint = [{key:"Object", data:obj}]; // Initialize array with original object while(arrPrint.length) { var o = arrPrint.pop(); if(typeof(o.data) === "object") { for(var k in o.data) { // Add each to end of array arrPrint.push({key: k, data: o.data[k]}); } alert("Object key: " + o.key); } else { alert("Key:" + o.key + " Values:" + o.data); } } } 

Supongo que en su request (suponiendo que sea Ajax) no está especificando que dataType se devuelva como 'json'.

  • Lee JSON desde URL
  • Usar variables como nombres de miembros de objects en Javascript
  • Objeto JSON no definido en Internet Explorer 8
  • jsTree: enlace a objects de dominio
  • Agregar nueva matriz a un object al cargar Angular
  • Obtener json, url de la image
  • JavaScript: ¿Cómo creo JSONP?
  • Crear tabla a partir de datos JSON con angularjs y ng-repeat
  • Comprender la estructura JSON: attributes y valores
  • Looping a través de python-dictionary-turned-into-json en javascript
  • Inicializa un object JavaScript usando JSON
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.