在 ActionScript 3 中解析 JSON(本机 JSON)
Parse JSON in ActionScript 3 (Native JSON)
我正在使用本机 AS3 JSON.Parse() 将 JSON 文件加载到 Flash CC (Flash11) 中。
一切都加载正常,我可以看到数据,我遇到的问题是 JSON titles/tags 之一更改了名称,因此很难引用。
为了让它更清楚一点,它是一个天气预报,位置可以改变,但我总是不知道该怎么办!
{
"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中的"Manchester"和"London"标签可以改变('data'内)
我将以下 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.....
”的行
有没有办法 read/find 找出标签名称并知道它的曼彻斯特、伦敦、都柏林、巴黎等
或者有没有一种方法可以跳过 tag/name 详细信息 - 类似于 parsedJSON.data[0].today.temp_c
和 parsedJSON.data[1].today.temp_c
- 就像使用数组一样。
非常感谢任何帮助。
:)
要完成您正在寻找的事情,您可以这样做:
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
}
希望对你有所帮助。
我正在使用本机 AS3 JSON.Parse() 将 JSON 文件加载到 Flash CC (Flash11) 中。 一切都加载正常,我可以看到数据,我遇到的问题是 JSON titles/tags 之一更改了名称,因此很难引用。
为了让它更清楚一点,它是一个天气预报,位置可以改变,但我总是不知道该怎么办!
{
"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中的"Manchester"和"London"标签可以改变('data'内)
我将以下 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.....
”的行
有没有办法 read/find 找出标签名称并知道它的曼彻斯特、伦敦、都柏林、巴黎等
或者有没有一种方法可以跳过 tag/name 详细信息 - 类似于 parsedJSON.data[0].today.temp_c
和 parsedJSON.data[1].today.temp_c
- 就像使用数组一样。
非常感谢任何帮助。
:)
要完成您正在寻找的事情,您可以这样做:
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
}
希望对你有所帮助。