我目前正在使用wunderground api作为学习JS的工具。我有以下代码来解析我收到的JSON响应中的数据,但这是一个小时预测,我想解析36小时,下面的代码只解析1小时。我知道除了为所有36小时创建变量之外,还有一种更简单的方法。如果有人能指出我正确的方向,我会很感激。
我目前如何解析JSON:
$(document).ready(function(){
$("#hourly").click(function() {
var t = document.getElementById("zip").value;
$.ajax({
url : "http://api.wunderground.com/api/MYKEY/hourly/q/" + t + ".json",
dataType : "jsonp",
success : function(parsed_json) {
var h0day = parsed_json['hourly_forecast']["0"]["FCTTIME"]['weekday_name_abbrev'];
var h0time = parsed_json['hourly_forecast']["0"]["FCTTIME"]["civil"];
var h0temp = parsed_json['hourly_forecast']["0"]["temp"]["english"];
var h0icon = parsed_json['hourly_forecast']["0"]["icon_url"];
var h0condition = parsed_json['hourly_forecast']["0"]["condition"];
我正在解析的示例JSON响应:
{
"response": {
"version":"0.1",
"termsofService":"http://www.wunderground.com/weather/api/d/terms.html",
"features": {
"hourly": 1
}
}
,
"hourly_forecast": [
{
"FCTTIME": {
"hour": "21","hour_padded": "21","min": "00","sec": "0","year": "2014","mon": "1","mon_padded": "01","mon_abbrev": "Jan","mday": "26","mday_padded": "26","yday": "25","isdst": "0","epoch": "1390788000","pretty": "9:00 PM EST on January 26, 2014","civil": "9:00 PM","month_name": "January","month_name_abbrev": "Jan","weekday_name": "Sunday","weekday_name_night": "Sunday Night","weekday_name_abbrev": "Sun","weekday_name_unlang": "Sunday","weekday_name_night_unlang": "Sunday Night","ampm": "PM","tz": "","age": ""
},
"temp": {"english": "24", "metric": "-3"},
"dewpoint": {"english": "15", "metric": "-9"},
"condition": "Overcast",
"icon": "cloudy",
"icon_url":"http://icons-ak.wxug.com/i/c/k/nt_cloudy.gif",
"fctcode": "4",
"sky": "94",
"wspd": {"english": "8", "metric": "13"},
"wdir": {"dir": "South", "degrees": "190"},
"wx": "",
"uvi": "0",
"humidity": "67",
"windchill": {"english": "16", "metric": "-8"},
"heatindex": {"english": "-9998", "metric": "-9998"},
"feelslike": {"english": "16", "metric": "-8"},
"qpf": {"english": "", "metric": ""},
"snow": {"english": "", "metric": ""},
"pop": "10",
"mslp": {"english": "29.87", "metric": "1011"}
}
,
{
"FCTTIME": {
"hour": "22","hour_padded": "22","min": "00","sec": "0","year": "2014","mon": "1","mon_padded": "01","mon_abbrev": "Jan","mday": "26","mday_padded": "26","yday": "25","isdst": "0","epoch": "1390791600","pretty": "10:00 PM EST on January 26, 2014","civil": "10:00 PM","month_name": "January","month_name_abbrev": "Jan","weekday_name": "Sunday","weekday_name_night": "Sunday Night","weekday_name_abbrev": "Sun","weekday_name_unlang": "Sunday","weekday_name_night_unlang": "Sunday Night","ampm": "PM","tz": "","age": ""
},
"temp": {"english": "25", "metric": "-3"},
"dewpoint": {"english": "16", "metric": "-8"},
"condition": "Overcast",
"icon": "cloudy",
"icon_url":"http://icons-ak.wxug.com/i/c/k/nt_cloudy.gif",
"fctcode": "4",
"sky": "94",
"wspd": {"english": "9", "metric": "14"},
"wdir": {"dir": "SSW", "degrees": "199"},
"wx": "",
"uvi": "0",
"humidity": "70",
"windchill": {"english": "16", "metric": "-8"},
"heatindex": {"english": "-9998", "metric": "-9998"},
"feelslike": {"english": "16", "metric": "-8"},
"qpf": {"english": "0.00", "metric": "0.00"},
"snow": {"english": "", "metric": ""},
"pop": "10",
"mslp": {"english": "29.82", "metric": "1009"}
}
,
{
"FCTTIME": {
"hour": "23","hour_padded": "23","min": "00","sec": "0","year": "2014","mon": "1","mon_padded": "01","mon_abbrev": "Jan","mday": "26","mday_padded": "26","yday": "25","isdst": "0","epoch": "1390795200","pretty": "11:00 PM EST on January 26, 2014","civil": "11:00 PM","month_name": "January","month_name_abbrev": "Jan","weekday_name": "Sunday","weekday_name_night": "Sunday Night","weekday_name_abbrev": "Sun","weekday_name_unlang": "Sunday","weekday_name_night_unlang": "Sunday Night","ampm": "PM","tz": "","age": ""
},
"temp": {"english": "26", "metric": "-2"},
"dewpoint": {"english": "17", "metric": "-7"},
"condition": "Overcast",
"icon": "cloudy",
"icon_url":"http://icons-ak.wxug.com/i/c/k/nt_cloudy.gif",
"fctcode": "4",
"sky": "94",
"wspd": {"english": "9", "metric": "14"},
"wdir": {"dir": "SSW", "degrees": "199"},
"wx": "",
"uvi": "0",
"humidity": "70",
"windchill": {"english": "18", "metric": "-7"},
"heatindex": {"english": "-9998", "metric": "-9998"},
"feelslike": {"english": "18", "metric": "-7"},
"qpf": {"english": "", "metric": ""},
"snow": {"english": "", "metric": ""},
"pop": "10",
"mslp": {"english": "29.82", "metric": "1009"}
}
,
......等等。
答案 0 :(得分:3)
查看你的json,看起来hourly_forecast
是一个数组,所以你应该能够像任何其他数组一样索引它。所以,而不是:
var h0day = parsed_json['hourly_forecast']["0"]["FCTTIME"]['weekday_name_abbrev'];
你应该可以这样做:
var h0day = parsed_json.hourly_forecast[i].FCTTIME.weekday_name_abbrev;
其中i
是for
循环中的变量:
success : function(parsed_json) {
// check we have at least 36 entries
var j = parsed_json.hourly_forcast.length < 36 ? parsed_json.hourly_forcast.length : 36;
for(var i=0; i<j; i++) {
var h0day = parsed_json.hourly_forecast[i].FCTTIME.weekday_name_abbrev;
//...etc...
// now do something with those parsed values...
}
}
现在如果您确实需要存储这些值,那么我建议使用数组并将值推送到数组中......
var myParsedData = [];
现在在你的成功函数中,我将值存储为对象:
for(var i=0; i<j; i++) {
myParsedData.push({
hday: parsed_json.hourly_forecast[i].FCTTIME.weekday_name_abbrev,
htime: parsed_json.hourly_forecast[i].FCTTIME.civil,
htemp: parsed_json.hourly_forecast[i].temp.english,
hicon: parsed_json.hourly_forecast[i].icon_url
hcondition: parsed_json.hourly_forecast[i].condition
});
}
稍后您可以访问它们:
console.log(myParsedData[0].hday);