如何解析此 JSON 数据并获取我想要的属性列表?
How do I parse this JSON data and get the attributes I want as a list?
我正在构建一个 air 应用程序,它需要使用 REST API 从 Firebase 数据库访问数据。我能够获取数据,但我不知道如何从该数据中获取我需要的信息。
基本上,我有一个 Android 应用程序和一个桌面应用程序。 android 应用程序 uploads/Modifies 数据和桌面应用程序需要访问该数据并通过套接字连接向 ESP8266 发送信号。我有一个 'Lights' 每个灯的列表,作为 'lightname'、'status' 和 '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.
非常感谢任何帮助。
因为您从 Firebase 得到的 e.target.data 答案是 String 并且首先您需要 JSON.parse(...) 将其转换为数据。那么你的数据不是Array,而是Object。你循环遍历它如下:
// 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']);
}
我正在构建一个 air 应用程序,它需要使用 REST API 从 Firebase 数据库访问数据。我能够获取数据,但我不知道如何从该数据中获取我需要的信息。
基本上,我有一个 Android 应用程序和一个桌面应用程序。 android 应用程序 uploads/Modifies 数据和桌面应用程序需要访问该数据并通过套接字连接向 ESP8266 发送信号。我有一个 'Lights' 每个灯的列表,作为 'lightname'、'status' 和 '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.
非常感谢任何帮助。
因为您从 Firebase 得到的 e.target.data 答案是 String 并且首先您需要 JSON.parse(...) 将其转换为数据。那么你的数据不是Array,而是Object。你循环遍历它如下:
// 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']);
}