如何解析此JSON数据并获取我想要的属性作为列表?

时间:2018-04-22 20:58:33

标签: json actionscript-3

我正在构建一个需要使用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.

非常感谢任何帮助。

1 个答案:

答案 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']);
}