首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置一个循环来分析JSON响应

设置一个循环来分析JSON响应
EN

Stack Overflow用户
提问于 2014-01-29 19:30:59
回答 1查看 205关注 0票数 1

我目前正在使用wunderground作为学习JS的工具。我有下面的代码来解析来自我正在获得的JSON响应的数据,但是这是一个小时预测,我想解析36小时,下面的代码只解析1小时。我知道,除了为所有36个小时创建变量外,还有一种更简单的方法。如果有人能为我指明正确的方向,我将不胜感激。

当前如何解析JSON:

代码语言:javascript
运行
复制
$(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响应:

代码语言:javascript
运行
复制
{
  "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"}
        }
        ,

...依此类推。

EN

回答 1

Stack Overflow用户

发布于 2014-01-29 19:37:23

查看您的json,它看起来像是一个数组,因此您应该能够像任何其他数组一样对它进行索引。因此,与其:

代码语言:javascript
运行
复制
 var h0day = parsed_json['hourly_forecast']["0"]["FCTTIME"]['weekday_name_abbrev'];

你应该能够:

代码语言:javascript
运行
复制
 var h0day = parsed_json.hourly_forecast[i].FCTTIME.weekday_name_abbrev;

其中ifor循环中的一个变量:

代码语言:javascript
运行
复制
 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...
     }
 }

如果您确实需要存储这些值,那么我建议使用数组并将值推入数组.

代码语言:javascript
运行
复制
var myParsedData = [];

现在,在您的成功函数中,我将将值存储为对象:

代码语言:javascript
运行
复制
     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
         });
     }

为了以后访问它们,您可以这样做:

代码语言:javascript
运行
复制
console.log(myParsedData[0].hday);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21440766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档