解析 json 响应给出未定义

Parsing json response gives undefined

我正在使用 angularfire2 从实时数据库中获取数据。响应如下

    {"type":"value",
     "payload":{
                   "-LJXFAd_q3Cin64EBc7H":
                     {"_date":"9-8-2018",
                      "_deliveryType":"Pick up",
                      "_estDeliveryTime":"2018-08-10T11:43:57.164Z",
                       "_location":""}
}}

这个在做

有效负载中的元素是使用推送创建的密钥。我不知道它可以参考,所以我如何获取 "LJXFAd_q3Cin64EBc7H" 下的数据?

有效负载中有很多这样的条目,我需要全部获取。

用于获取上述内容的代码是:

getOrderHistory(uid:string){
    console.log('start of getOrderHistory with uid:' + uid)
    return new Promise((resolve, reject) =>
      {
        this.db.object("/users/" + uid + "/orders").snapshotChanges().subscribe(
          res => {
            //console.log('response:' + res)
            resolve(res)
          },
          err => {
            console.log(err)
            reject(err)
          }
        )
      })
  }

通常情况下,实时数据库会发送快照,您可以在其中执行 snapshot.id 来获取 id 和 .data(或我现在忘记的 .data())以获取有效负载。

JSON.parse 然后迭代它或用点符号或括号符号得到它。要获得 属性:

obj[payload][LJXFAd_q3Cin64EBc7H]

迭代它:

function eachRecursive(obj)
{
    for (var k in obj)
    {
        if (typeof obj[k] == "object" && obj[k] !== null)
            eachRecursive(obj[k]);
        else
            // do something... 
    }
}

试试这个,它将每个快照映射到一个包含其键和值的对象。

this.db.object("/users/" + uid + "/orders").snapshotChanges()
.map(snapshot => {
  const key = snapshot.key;
  const data = snapshot.payload.val();
  return { key, ...data };
})
.subscribe(res => {
  resolve(res);
},
err => {
  console.log(err);
  reject(err);
});