我正在构建一个需要使用REST API从Firebase数据库访问数据的应用程序。我能够获取数据,但我不知道如何从该数据中获取所需的信息。
基本上,我有一个Android应用程序和一个桌面应用程序。 Android应用程序上传/修改数据,桌面应用程序需要访问该数据并通过套接字连接向ESP8266发送信号。我有一个' Lights'每个灯光都是一个灯光名称,状态'并且' pin'。我希望能够遍历所有的' pin。
当我尝试获取数据时,我得到了这个JSON:
{"-LAb_YKS9l7qQno25AY5":{"lightname":"light1","pin":"14","status":"on","timestamp":1524303808146},"-LAb_cRpsGpQfr7JbCfI":{"lightname":"light2","pin":"15","status":"on","timestamp":1524303830159},"-LAb_zbf2sYuyTtW_uEr":{"lightname":"blah","pin":"9","status":"on","timestamp":1524303921921},"-LAba68lzyG15n6anuSF":{"lightname":"dishl","pin":"7","status":"on","timestamp":1524303955946},"-LAdZW2JjQVGfLMc_sb4":{"lightname":"cxcxc","pin":"14","status":"on","timestamp":1524337092712}}
我想循环遍历所有灯光并访问他们的' pin'值。 这是我尝试过的:
for (var i:int = 0; i < e.target.data.length; i++)
{
trace(e.target.data[i]["status"]);
}
我收到此错误:
Property 0 not found on String and there is no default value.
非常感谢任何帮助。
答案 0 :(得分:1)
因为您从Firebase获得的 e.target.data 答案是字符串,首先您需要 JSON.parse(...)它将其转换为数据。那么您的数据不是数组,而是对象。你循环遍历如下:
// Parse the incoming data.
var aData:Object = JSON.parse(e.target.data);
// Loop through string keys of the data object.
for (var aKey:String in aData)
{
trace("");
trace(aKey);
// Assign entry reference to another local variable. This is not
// mandatory, but the following code is shorter and thus more readable.
var anEntry:Object = aData[aKey];
trace(anEntry['pin']);
trace(anEntry['status']);
trace(anEntry['lightname']);
}
如果您没有使用键值,则可能会采用稍微不同的方式:
// Parse the incoming data.
var aData:Object = JSON.parse(e.target.data);
// Loop through values of the data object while ignoring the keys.
for each (var anEntry:Object in aData)
{
trace("");
trace(anEntry['pin']);
trace(anEntry['status']);
trace(anEntry['lightname']);
}