I am using node.js and I am getting data from firebase real-time database. The problem is I am getting data something like this :
for data getting code! JS
import firebaseApp from '../config.js';
import { getDatabase, ref, onValue } from "firebase/database";
const userRef = ref(database, "Users");
onValue(userRef, (snapshot) => {
if (snapshot.exists) {
const data = snapshot.val();
console.log(data); // data printed to console
}
}, {
onlyOnce: true
});
Console Output
{
"random-user-id-1": {
"name": "Jhon Doe",
"profile": "profilelink",
"email": "example@email.com"
},
"random-user-id-2": {
"name": "Cr7",
"profile": "profilelink",
"email": "example@email.com"
},
// and more...
}
I want to display this data as an array of objects. Example of expected output
[
{
"name": "Jhon Doe",
"profile": "profilelink",
"email": "example@email.com"
},
{
"name": "Cr7",
"profile": "profilelink",
"email": "example@email.com"
}
// and more........ ^_~
]
thank you :)
seems like you need only the values from your dict, you can transform your data this way:
const lst = {
"random-user-id-1": {
"name": "Jhon Doe",
"profile": "profilelink",
"email": "example@email.com"
},
"random-user-id-2": {
"name": "Cr7",
"profile": "profilelink",
"email": "example@email.com"
},
}
const expectedFormatRes = Object.values(lst);
console.log(expectedFormatRes);
An alternative to Gil's answer would be to use Firebase's built-in. forEach operation:
if (snapshot.exists) {
let values = [];
snapshot.forEach((child) => {
value.push(child.val());
})
console.log(values);
}
While longer, this has the advantage that it maintains the order in which the database returned the data, which becomes relevant when you specify an orderBy... clause on your query..