Si tengo algún json como este:
{ "dcf93893d83e4f28953f140b9cba1963":{ "foo":{ "client":"127.0.0.1", "id":"31971", "start time":1654131724.160335 }, "bar":{ "client":"127.0.0.1", "id":"23456", "start time":1654131900.997766 } } }Descubrí cómo recorrerlo de esta manera:
for (var key in json) { if (json.hasOwnProperty(key)) { console.log(json[key]) } }¿Cómo puedo recorrer cada subelemento (foo y bar en este caso) y luego obtener una clave, por ejemplo, id?
cliente, id y hora de inicio son los únicos nombres de clave conocidos
Rendimiento esperado:
31971 23456EDITAR: El json proviene de buscar:
setInterval(function () { fetch(<url>) .then(function (response) { return response.json(); }) .then(function (json) { for (var key in json) { if (json.hasOwnProperty(key)) { console.log(json[key]) } } }) }, 2000);Haz otro bucle y toma los valores internos por nombre de clave:
const json = { "dcf93893d83e4f28953f140b9cba1963":{ "foo":{ "client":"127.0.0.1", "id":"31971", "start time":1654131724.160335 }, "bar":{ "client":"127.0.0.1", "id":"23456", "start time":1654131900.997766 } } } for (var key in json) { if (json.hasOwnProperty(key)) { //console.log(json[key]) for(var key2 in json[key]) { console.log(json[key][key2]["id"]) } } }Tienes que hacer un bucle en cada bucle. y guarde cada identificación en una matriz.
var ids = [] for (var key in json) { if (json.hasOwnProperty(key)) { for(var obj in json[key]) { if (obj.id) ids.push(obj.id) } } }En lugar de iterar, podría simplemente obtener los valores del objeto con Object.values() y mapearlos en consecuencia usando flatMap() y map() :
const data = { "dcf93893d83e4f28953f140b9cba1963": { "foo": { "client": "127.0.0.1", "id": "31971", "start time": 1654131724.160335 }, "bar": { "client": "127.0.0.1", "id": "23456", "start time": 1654131900.997766 } } }; const result = Object.values(data) .flatMap(v => Object.values(v)).map(({id}) => id); console.log(result);