Создание массива из объекта в ActionScript - PullRequest
0 голосов
/ 31 июля 2011

У меня есть объект, который был десериализован из JSON.Выглядит это так, самоанализ в FlashBuilder:

Cities //object
   Denver //object, contained within Cities
       description "Mile High City"
       location "Colorado"
   Los Angeles//object, contained within Cities
       description "City of Angels"
       location "California"
   New York //object, contained within Cities
       description "The Big Apple"
       location "New York State"

Все, что я пытаюсь сделать, это создать массив городов, чтобы я мог сделать что-то вроде этого: trace (arrCities [i] .description);// возвращает «Город высотой в милю» или «Город ангелов» в зависимости от значения i.

Но я не могу найти строки.Среди всего, что я пробовал, ничего из этого не работает:

var arrCities:Array = objCities as Array; //doesn't work

И:

  for (var prop:String in objCities);       
  { 
     trace("objCities."+prop+" = "+objCities[prop]);
     trace(prop.description);  //this returns only one random description 
                              //(sometimes "The Big Apple, sometimes "City of Angels" etc.
     arrCities.push(objCities[prop]);

  }

и

  for each (var prop:String in objCities);      
  { 
     trace("objCities."+prop+" = "+objCities[prop]);
     trace(prop.description);  // returns "objCities.[object Object] = undefined"
     arrCities.push(objCities[prop]);

  }

Должно быть простое решениеэто, но я не могу найти это.Любая помощь приветствуется.

Спасибо.

cities: {
    denver: {
        dateCreated: 0
        description: "Mile High Cty"
        cityCode: "dv"
        cityName: "Denver"
        properties: { }
        title: ""
    }
    newyork: {
        dateCreated: 0
        description: "The Big Apple"
        cityCode: "nyc"
        cityName: "New York"
        properties: { }
        title: ""
    }
    losangeles: {
        dateCreated: 0
        description: "City of Angels"
        cityCode: "la"
        cityName: "Los Angeles"
        properties: { }
        title: ""
    }
}

Ответы [ 2 ]

3 голосов
/ 31 июля 2011
var objCities:Object = JSON.decode(objStr);
var arrCities:Array = [];

for each (var prop:Object in objCities)     
{ 
     arrCities.push(prop);
}
trace(arrCities[0].description);

Explaination:

Форма for(var foo in bar) устанавливает foo в качестве имени текущего элемента bar в итерации. for each(var foo in bar) устанавливает foo как свойство этого элемента bar. Вы хотите, чтобы каждый внутренний объект, а не имя этого объекта, был вставлен в массив, чтобы в итоге вы получили массив объектов типа {description:"City of Angels",location:"California"}

0 голосов
/ 31 июля 2011

Эта библиотека включает в себя стандарт факто чтения JSON в объекты AS3: https://github.com/mikechambers/as3corelib. Вам нужно будет его использовать.Разработка собственной версии анализатора JSON (вероятно) ни в коем случае не является разумной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...