2015-01-01 60 views
0

我正在使用本機AS3 JSON.Parse()將JSON文件加載到Flash CC(Flash11)中。 一切都加載正常,我可以看到數據,我有問題的是,其中一個JSON標題/標籤更改其名稱,所以很難引用。在ActionScript 3中解析JSON(Native JSON)

爲了使它更清楚一點,它的天氣饋送和位置可以改變,我並不總是知道該怎麼做!

{ 
"schema-version": 1, 
"request-time": "2014-12-31 00:17:38", 
"feed": "WEATHER", 
"data": { 
    "Manchester": { 
     "today": { 
      "obs_time": "12:16 AM", 
      "temp_c": 2, 
      "humidity": 93, 
      "visibility": 10, 
      "pressure": 1033, 
      "cloud_cover": 0, 
      "wind_dir": "S", 
      "wind_dir_degree": 170, 
      "precip_mm": 0 
     } 
    }, 
    "London": { 
     "today": { 
      "obs_time": "12:14 AM", 
      "temp_c": 3, 
      "humidity": 87, 
      "visibility": 10, 
      "pressure": 1036, 
      "cloud_cover": 0, 
      "wind_dir": "SW", 
      "wind_dir_degree": 230, 
      "precip_mm": 0 
     } 
    } 
} 

}

它是 「曼徹斯特」 和 「倫敦」 在上面的JSON,可以(在 '數據')改變標記。

我用下面的AS3代碼爲JSON裝載機和解析...

public function getWeather(): void { 
     json = new URLLoader(); 
     json.addEventListener(Event.COMPLETE, parseJSON); 
     json.load(new URLRequest(unity_weather)); 
    } 

    protected function parseJSON(e: Event): void { 
     trace("JSON Weather data loaded successfully!"); 

     parsedJSON = JSON.parse(json.data); 

     //Header info 
     uWeather.Request_time = parsedJSON["request-time"]; 
     uWeather.Location = parsedJSON.data; 

     //Now 
     uWeather.Temp_now = parsedJSON.data.Manchester.today.temp_c; //not always 'Manchester' 
     uWeather.Time_now = parsedJSON.data.Manchester.today.obs_time; //not always 'Manchester' 
     uWeather.Humidity_now = parsedJSON.data.Manchester.today.humidity; //not always 'Manchester' 
     uWeather.Visibility_now = parsedJSON.data.Manchester.today.visibility; //not always 'Manchester' 

     } 

問題行是那些與「parsedJSON.data.Manchester.....

有沒有辦法要麼讀/找出標籤名稱和知道它的曼徹斯特,倫敦,都柏林,巴黎..等 或者有沒有辦法跳過標籤/名稱的細節 - 像parsedJSON.data[0].today.temp_cparsedJSON.data[1].today.temp_c - 就像你會用數組。

任何幫助非常感謝。

:)

回答

1

要你在找什麼,你可以這樣做:

function parseJSON(e:Event):void { 

    var parsedJSON = JSON.parse(json.data); 

    // trace('request-time : ' + parsedJSON['request-time']); 

    for(var city_name:String in parsedJSON.data){ 

     // extract data without fixing the city name in the code 
     var city:Object = parsedJSON.data[city_name]; 
     trace('city : ' + city_name); 
     trace(' temp_c : ' + city.today.temp_c); 
     trace(' obs_time : ' + city.today.obs_time); 
     trace(' humidity : ' + city.today.humidity); 
     trace(' visibility : ' + city.today.visibility); 

    } 
    // gives : 
    // city : London 
    //  temp_c : 3 
    //  obs_time : 12:14 AM 
    //  humidity : 87 
    //  visibility : 10 
    // city : Manchester 
    //  temp_c : 2 
    //  obs_time : 12:16 AM 
    //  humidity : 93 
    //  visibility : 10 

} 

希望能幫助你。

+0

完美!感謝那。 – TDixon