2009-11-06 46 views
2

我在解析AS3中的JSON文件時出現問題。我試圖解析多個JSON數組,但是在訪問第一個數組後不知道如何到達下一個。我的JSON文件看起來像:AS3基本解析JSON問題

{ 
    "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 2009-11-06 08:24:33

回答

3

有一件事我注意到的是,你的JSON是有些蹊蹺,並會導致錯誤。你的JSON的主要類是一個定義兩次這個詞的字典。這不會導致錯誤,但會導致values.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)" 

      } 
     ] 
    ] 
}