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

时间:2018-07-02 01:11:56

标签: javascript json reactjs firebase firebase-realtime-database

我是Firebase的初学者,请作出反应。我能够基于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",
    },
 }

请帮助我如何将所有值(“ -Lhdfgkjd6fn3AA-”,名字,姓氏,电子邮件和favQuote)访问变量,例如:data.firstName,data.lastName,data.key等。谢谢。

3 个答案:

答案 0 :(得分:2)

let data = {
 "-Lhdfgkjd6fn3AA-": {
        "email": "t5@gmail.com",
        "favQuote": "this is it",
        "firstName": "t5",
        "lastName": "l5",
    },
 };
 
 console.log(Object.keys(data))//returning an array of keys, in this case ["-Lhdfgkjd6fn3AA-"]
 console.log(Object.keys(data)[0])
 console.log(Object.values(data))//returning an array of values of property
 console.log(Object.values(data)[0].email)
 
 

请务必注意,上面的代码以硬编码“ 0”作为索引,因为它假定您的data对象只有一个键。如果您有更多的键,那么也不能简单地替换索引,因为对象的属性没有可预测的顺序

答案 1 :(得分:1)

这实际上是一个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);
}

答案 2 :(得分:0)

对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);
    });
})