首页 > 解决方案 > 解析 JSON 时获取“未定义”对象

问题描述

我正在尝试使用我正在尝试的 Node.js 应用程序从 AccuWeather API 获取数据。JSON.parse()我使用方法解析了响应。但是当我尝试访问一些嵌套对象时,它是一个undefined值。我对这一切都很陌生,不知道发生了什么或该怎么做。

我从服务器得到的响应如下

{"LocalObservationDateTime":"2019-03-27T12:30:00+05:30","EpochTime":1553670000,"WeatherText":"Partly sunny","WeatherIcon":3,"HasPrecipitation":false,"PrecipitationType":null,"IsDayTime":true,"Temperature":{"Metric":{"Value":33.4,"Unit":"C","UnitType":17},"Imperial":{"Value":92.0,"Unit":"F","UnitType":18}},"RealFeelTemperature":{"Metric":{"Value":40.1,"Unit":"C","UnitType":17},"Imperial":{"Value":104.0,"Unit":"F","UnitType":18}},"RealFeelTemperatureShade":{"Metric":{"Value":37.4,"Unit":"C","UnitType":17},"Imperial":{"Value":99.0,"Unit":"F","UnitType":18}},"RelativeHumidity":61,"DewPoint":{"Metric":{"Value":25.1,"Unit":"C","UnitType":17},"Imperial":{"Value":77.0,"Unit":"F","UnitType":18}},"Wind":{"Direction":{"Degrees":315,"Localized":"NW","English":"NW"},"Speed":{"Metric":{"Value":16.7,"Unit":"km/h","UnitType":7},"Imperial":{"Value":10.4,"Unit":"mi/h","UnitType":9}}},"WindGust":{"Speed":{"Metric":{"Value":12.4,"Unit":"km/h","UnitType":7},"Imperial":{"Value":7.7,"Unit":"mi/h","UnitType":9}}},"UVIndex":11,"UVIndexText":"Extreme","Visibility":{"Metric":{"Value":16.1,"Unit":"km","UnitType":6},"Imperial":{"Value":10.0,"Unit":"mi","UnitType":2}},"ObstructionsToVisibility":"","CloudCover":50,"Ceiling":{"Metric":{"Value":9144.0,"Unit":"m","UnitType":5},"Imperial":{"Value":30000.0,"Unit":"ft","UnitType":0}},"Pressure":{"Metric":{"Value":1012.0,"Unit":"mb","UnitType":14},"Imperial":{"Value":29.88,"Unit":"inHg","UnitType":12}},"PressureTendency":{"LocalizedText":"Falling","Code":"F"},"Past24HourTemperatureDeparture":{"Metric":{"Value":-0.2,"Unit":"C","UnitType":17},"Imperial":{"Value":0.0,"Unit":"F","UnitType":18}},"ApparentTemperature":{"Metric":{"Value":40.6,"Unit":"C","UnitType":17},"Imperial":{"Value":105.0,"Unit":"F","UnitType":18}},"WindChillTemperature":{"Metric":{"Value":33.3,"Unit":"C","UnitType":17},"Imperial":{"Value":92.0,"Unit":"F","UnitType":18}},"WetBulbTemperature":{"Metric":{"Value":27.3,"Unit":"C","UnitType":17},"Imperial":{"Value":81.0,"Unit":"F","UnitType":18}},"Precip1hr":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PrecipitationSummary":{"Precipitation":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PastHour":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past3Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past6Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past9Hours":{"Metric":{"Value":1.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.04,"Unit":"in","UnitType":1}},"Past12Hours":{"Metric":{"Value":2.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.08,"Unit":"in","UnitType":1}},"Past18Hours":{"Metric":{"Value":3.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.12,"Unit":"in","UnitType":1}},"Past24Hours":{"Metric":{"Value":3.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.12,"Unit":"in","UnitType":1}}},"TemperatureSummary":{"Past6HourRange":{"Minimum":{"Metric":{"Value":29.0,"Unit":"C","UnitType":17},"Imperial":{"Value":84.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":33.4,"Unit":"C","UnitType":17},"Imperial":{"Value":92.0,"Unit":"F","UnitType":18}}},"Past12HourRange":{"Minimum":{"Metric":{"Value":26.4,"Unit":"C","UnitType":17},"Imperial":{"Value":80.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":33.4,"Unit":"C","UnitType":17},"Imperial":{"Value":92.0,"Unit":"F","UnitType":18}}},"Past24HourRange":{"Minimum":{"Metric":{"Value":26.4,"Unit":"C","UnitType":17},"Imperial":{"Value":80.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":34.9,"Unit":"C","UnitType":17},"Imperial":{"Value":95.0,"Unit":"F","UnitType":18}}}},"MobileLink":"http://m.accuweather.com/en/in/cheranallur/2875231/current-weather/2875231?lang=en-us","Link":"http://www.accuweather.com/en/in/cheranallur/2875231/current-weather/2875231?lang=en-us"}

我正在使用的代码如下

request('api_url', function(error, response, body) {
  var jsonObj = JSON.parse(body);
  console.log(jsonObj.EpochTime); // This works fine.
  console.log(jsonObj.WeatherText); // Also this.
  console.log(jsonObj.Speed.Metric.Value); // This is the code that is crashing.
}

我得到的错误信息如下

/Users/abbinvarghese/Desktop/weather-history/app.js:77
        windSpeed: jsonObj.Speed.Metric.Value, // in km/h
                                 ^

TypeError: Cannot read property 'Metric' of undefined
    at Object.<anonymous> (/Users/abbinvarghese/Desktop/weather-history/app.js:77:34)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

标签: javascriptnode.jsjsonparsing

解决方案


你错过了Wind

jsonObj.Wind.Speed.Metric.Value

推荐阅读