2009-11-06 2 views
2

У меня возникла проблема с разбором файла JSON в AS3. Я пытаюсь разобрать несколько массивов JSON, но не знаю, как добраться до следующего после доступа к первому. Мой файл JSON выглядит следующим образом:AS3 Basic Parsing JSON question

{ 
    "term": [ 
      { 
       "id": 4211, 
       "place": "NEW YORK CITY" 
      }, 
      { 
       "id": 2675, 
       "place": "WASHINGTON (DC)" 

      } 
      ], 
    "term": [ 
      { 
       "id": 4211, 
       "place": "NEW YORK CITY" 
      }, 
      { 
       "id": 2675, 
       "place": "WASHINGTON (DC)" 

      } 
] 

} 

Мой AS3 код выглядит следующим образом:

public function parseData(e:Event):void 
    { 
    var loader:URLLoader = URLLoader(e.target); 
    var values:Object = JSON.decode(loader.data); 
    var term:Array = values.term; 
    var counter:Number = 0; 

    for (var key:Object in term) 
    { 
    payload[counter] = [term[key].id, term[key].place]; 
    counter++; 
    } 

     dispatchEvent(new Event(Event.COMPLETE)); 
    } 

я могу получить данные из первого массива, но как бы я структурировать свой код, чтобы я мог перебирать 2 или более "срочных" массивов?

Благодаря

+1

Правомерно для объекта, чтобы иметь два свойства с точно таким же именем в формате JSON? – Amarghosh

ответ

3

Одна вещь, которую я заметил, что ваш JSON немного странно и вызывает вашу ошибку. Основной класс вашего JSON - это словарь, определяющий этот термин дважды. Это не вызывает ошибки, но приводит к тому, что значения.term будут перезаписаны во второй раз. Вы должны изменить свой JSON на что-то вроде:

{ 
    "term": [[ 
      { 
       "id": 4211, 
       "place": "NEW YORK CITY" 
      }, 
      { 
       "id": 2675, 
       "place": "WASHINGTON (DC)" 

      }], 
      [{ 
       "id": 4211, 
       "place": "NEW YORK CITY" 
      }, 
      { 
       "id": 2675, 
       "place": "WASHINGTON (DC)" 

      }] 
     ] 

} 

и ваш код:

public function parseData(e:Event):void 
    { 
    var loader:URLLoader = URLLoader(e.target); 
    var values:Object = JSON.decode(loader.data); 
    var term:Array = values.term; 
    var counter:Number = 0; 

    for (var keys:Object in term) 
    { 
    for (var key:Object in term[keys]) 
    { 
     payload[counter] = [term[keys][key].id, term[keys][key].place]; 
     counter++; 
    } 
    } 

    dispatchEvent(new Event(Event.COMPLETE)); 
} 
6

JSON (или любой другой тип отображения упорядоченный) не может содержать дубликаты ключей.

Решение будет реструктурировать JSON, чтобы быть похожим на это:

{ 
    "terms": [ 
     [ 
      { 
       "id": 4211, 
       "place": "NEW YORK CITY" 
      }, 
      { 
       "id": 2675, 
       "place": "WASHINGTON (DC)" 

      } 
     ], 
     [ 
      { 
       "id": 4211, 
       "place": "NEW YORK CITY" 
      }, 
      { 
       "id": 2675, 
       "place": "WASHINGTON (DC)" 

      } 
     ] 
    ] 
}