It took me a while but I finally got a for loop working to pull out the data I needed:
Not sure if I could do it a better way, but frankly I'm just delighted to have it working at the moment

private function genreFunction(data:Object, column:DataGridColumn):String
{
var myGenres:String;
myGenres = "";
for each(data.genres.genre in data.genres)
{
if (data.genres.genre[0]==null)
{
myGenres = data.genres.genre.displayname;
}
else
{
for (var genre:String in data.genres.genre)
{
myGenres += data.genres.genre[genre].displayname + ", ";
}
}
}
return myGenres;
}
The key was in getting to grips with the differnence between
for...in and
for each...in loops:
for..inThe for..in loop iterates through the properties of an object, or the elements of an array. For example, you can use a for..in loop to iterate through the properties of a generic object (object properties are not kept in any particular order, so properties may appear in a seemingly random order):
var myObj:Object = {x:20, y:30};
for (var i:String in myObj) {
trace (i + ": " + myObj[i]);
}
// output:
// x: 20
// y: 30
You can also iterate through the elements of an array:
var myArray:Array = ["one", "two", "three"];
for (var i:String in myArray) {
trace (myArray[i]);
}
// output:
// one
// two
// three
What you cannot do is iterate through the properties of an object if it is an instance of a user-defined class, unless the class is a dynamic class. Even with instances of dynamic classes, you will be able to iterate only through properties that are added dynamically.
for each..inThe for each..in loop iterates through the items of a collection, which can be tags in an XML or XMLList object, the values held by object properties, or the elements of an array. For example, as the following excerpt shows, you can use a for each..in loop to iterate through the properties of a generic object, but unlike the for..in loop, the iterator variable in a for each..in loop contains the value held by the property instead of the name of the property:
var myObj:Object = {x:20, y:30};
for each (var num in myObj) {
trace (num);
}
// output:
// 20
// 30
You can iterate through an XML or XMLList object, as the following example shows:
var myXML:XML = <users>
<fname>Jane</fname>
<fname>Susan</fname>
<fname>John</fname>
</users>;
for each (var item in myXML.fname) {
trace(item);
}
/* output
Jane
Susan
John
*/
You can also iterate through the elements of an array, as this example shows:
var myArray:Array = ["one", "two", "three"];
for each (var item in myArray) {
trace (item);
}
// output:
// one
// two
// three
You cannot iterate through the properties of an object if the object is an instance of a sealed class. Even for instances of dynamic classes, you cannot iterate through any fixed properties, which are properties defined as part of the class definition.
from Adobe docs