Javascript React,Firebase:访问JSON的值并获取键值

Javascript React,Firebase:访问JSON的值并获取键值,javascript,json,reactjs,firebase,firebase-realtime-database,Javascript,Json,Reactjs,Firebase,Firebase Realtime Database,我是firebase的初学者,react。我能够基于userEmail从firebase获得所需的数据。但我在访问数据时非常困惑 firebase.database().ref('/users').orderByChild('email').equalTo(userEmail).on('value', data => { console.log('data: ', data); }) 我得到以下输出: data: Object { "-Lhdfgkjd6fn3A

我是firebase的初学者,react。我能够基于userEmail从firebase获得所需的数据。但我在访问数据时非常困惑

firebase.database().ref('/users').orderByChild('email').equalTo(userEmail).on('value', data => {
        console.log('data: ', data);
    })
我得到以下输出:

data:  Object {
"-Lhdfgkjd6fn3AA-": Object {
        "email": "t5@gmail.com",
        "favQuote": "this is it",
        "firstName": "t5",
        "lastName": "l5",
    },
 }
请帮助我如何将所有值(“-lhdfgkjd6fn3a-”、firstname、lastname、email和favQuote)访问到变量中,如:data.firstname、data.lastname、data.key等。多谢各位

let数据={
“-Lhdfgkjd6fn3AA-”:{
“电子邮件”:t5@gmail.com",
“favQuote”:“就是这样”,
“名字”:“t5”,
“姓氏”:“l5”,
},
};
console.log(Object.keys(data))//返回一个键数组,在本例中为[“-lhdfgkjd6fn3a-”]
console.log(Object.keys(数据)[0])
console.log(Object.values(data))//返回属性值数组
console.log(Object.values(数据)[0]。电子邮件)
let数据={
“-Lhdfgkjd6fn3AA-”:{
“电子邮件”:t5@gmail.com",
“favQuote”:“就是这样”,
“名字”:“t5”,
“姓氏”:“l5”,
},
};
console.log(Object.keys(data))//返回一个键数组,在本例中为[“-lhdfgkjd6fn3a-”]
console.log(Object.keys(数据)[0])
console.log(Object.values(data))//返回属性值数组
console.log(Object.values(数据)[0]。电子邮件)

这确实是一个JavaScript问题。我也得弄清楚这件事。。。这很有效

var p;
var thisLine;
p = docu.data();
for (var k in p) {
    if (p.hasOwnProperty(k)) {
        if (isObject(p[k])) {
            thisLine = p[k];
            Object.keys(thisLine).forEach(function (key, index) {
                console.log(key, index);
            });
        }
    }
}

function isObject(obj) {
    return obj === Object(obj);
}

这确实是一个JavaScript问题。我也得弄清楚这件事。。。这很有效

var p;
var thisLine;
p = docu.data();
for (var k in p) {
    if (p.hasOwnProperty(k)) {
        if (isObject(p[k])) {
            thisLine = p[k];
            Object.keys(thisLine).forEach(function (key, index) {
                console.log(key, index);
            });
        }
    }
}

function isObject(obj) {
    return obj === Object(obj);
}

对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表

因此,第一步是需要在
on()
回调中循环快照

第二步是需要调用
Snapshot.val()
,从快照中获取JSON数据。从那里你可以得到单独的属性

firebase.database().ref('/users').orderByChild('email').equalTo(userEmail).on('value', snapshot => {
    snapshot.forEach(userSnapshot => {
        let data = userSnapshot.val();
        console.log('data: ', data);
        console.log(data.email, data.firstname);
    });
})

对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表

因此,第一步是需要在
on()
回调中循环快照

第二步是需要调用
Snapshot.val()
,从快照中获取JSON数据。从那里你可以得到单独的属性

firebase.database().ref('/users').orderByChild('email').equalTo(userEmail).on('value', snapshot => {
    snapshot.forEach(userSnapshot => {
        let data = userSnapshot.val();
        console.log('data: ', data);
        console.log(data.email, data.firstname);
    });
})

您可以使用以下命令获取值:data.-lhdfgkjd6fn3a-。email@NullPointer不,你不能。使用括号表示法。@CertainPerformance Ya。我错过了感谢
-lhdfkjd6fn3a-
应该是id,这是不可预测的,因此在他的程序中,我认为他无法预先猜出“键”,你能告诉我如何从上述数据访问-lhdfkjd6fn3a吗?你可以使用:data.-lhdfgkjd6fn3a-获得值。email@NullPointer不你不能。使用括号表示法。@CertainPerformance Ya。我错过了感谢
-lhdfkjd6fn3a-
应该是id,这是不可预测的,因此在他的程序中,我认为他无法预先猜出“键”,你能告诉我如何从上述数据访问-lhdfkjd6fn3a吗?我无法检索这些值。这就是我得到的:数据:数组[21:23:58:“节点”,21:23:58:“参考”,21:23:58:“索引”,21:23:58:]21:23:58:dat1:node:21:23:58:dat2:Array[21:23:58:ChildrenNode{21:23:58:“子节点”:SortedMap{21:23:58:“颜色”:false:LLRBEmptyNode{},21:23:58:“right”:LLRBEmptyNode{},@kumar111:这不是您在问题中共享的数据当我在异步后从firebase打印数据时,将提供我在问题中发布的数据。但是当我尝试使用Object.keys(数据)打印时,然后它打印出完全不同的输出。我不知道为什么。data.key给我用户数据给我:data:Object{“-lhdfgkjd6fn3a-”:Object{“email”:t5@gmail.com,“favQuote”:“就是这样”,“firstName”:“t5”,“lastName”:“l5”,},}但是Object.keys(data)给了我:Object data:Array[21:41:32:“节点”,21:41:32:“引用”,21:41:32:“索引”,21:41:32:@kumar111:你自己刚说过,
data.key
给了你用户数据,所以不要只
Object.keys(data)
,改为
Object.keys(data.key)
计算出来了。使用data.toJSON()有效。让data2=data.toJSON()控制台.log(Object.keys(data2)[0])-给了我密钥控制台.log(Object.values(data2)[0].email)-给了我电子邮件谢谢。我无法检索到这些值。这是我得到的:数据:数组[21:23:58:“节点”,21:23:58:“引用”,21:23:58:“索引”{21:23:58:“儿童”:分类地图{21:23:58:“颜色”:假,…..21:23:58:“键”:“-lhdfgkjd6fn3a-”,21:23:58:“左”:LLRBEmptyNode{},21:23:58:“右”:LLRBEmptyNode{},@kumar111:这不是您在问题中共享的数据。当我在异步后从firebase打印数据时,将提供我在问题中发布的数据。但是当我尝试使用Object.keys(data)打印时,它会打印完全不同的输出。我不确定为什么。data.key给我用户数据给我:data:Object{“-Lhdfgkjd6fn3AA-”:对象{“电子邮件”:”t5@gmail.com,favQuote:“就是这样”,“firstName:“t5”,“lastName:“l5”,},},}但是Object.keys(data)给我的是:Object data:Array[21:41:32:“node_”,21:41:32:“ref_”,21:41:32:“index_”,21:41:32:]@kumar111:你自己刚刚说过,
data.key
给了你用户数据,所以不要只是
Object.keys(data)
,把它改成
Object.keys(data.key)
就解决了。使用data.toJSON()有效。让data2=da