What you were doing wrong was that data[i] was NOT accessing the ith property of data.
to access a property of an object, I would recommend you use a period, for example:
data.Home, data.School, etc...
But if you really like the square parenthesis, you would have to use
data['Home'], data['School'], etc...
Notice the hyphens, ( ' ), make it so the stuff in between is a String (or possibly a label, not sure if there is such a thing or if there is a difference). My guess is that doing data[i] was actually converting the Number i into a String (basically, using the ASCII table). So it might be possible to access the properties in an object using a loop like that, but you would have to do something like:
data's properties: prop1, prop2, prop3...
for (var i:uint = 1; i < Last_Prop_Number; i++){
trace(i + ": " + data['prop'+String(i)]);
}
and with any luck, 'prop'+String(i) will become 'prop1', 'prop2', 'prop3'...
Of course, this means you have to RENAME ALL of your properties so they have these meaningless names, which if you were going to do that you might as well use an array: