在 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_cparsedJSON.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

}

希望对你有所帮助。