来自API的jQuery getJSON如何访问对象?

时间:2018-04-10 17:11:14

标签: javascript jquery json ajax

我正在尝试从API获取JSON,然后访问JSON的"main"对象的"weather"对象。

当我使用此代码时:

$.getJSON("https://fcc-weather-api.glitch.me/api/current?lat=35&lon=139", function(json) {
  var data = JSON.stringify(json);
  alert(data);
});

我得到了这个输出:

{
  "coord": {
    "lon": 159,
    "lat": 35
  },
  "weather": [{
    "id": 500,
    "main": "Rain",
    "description": "light rain",
    "icon": "https://cdn.glitch.com/6e8889e5-7a72-48f0-a061-863548450de5%2F10n.png?1499366021399"
  }],
  "base": "stations",
  "main": {
    "temp": 22.59,
    "pressure": 1027.45,
    "humidity": 100,
    "temp_min": 22.59,
    "temp_max": 22.59,
    "sea_level": 1027.47,
    "grnd_level": 1027.45
  },
  "wind": {
    "speed": 8.12,
    "deg": 246.503
  },
  "rain": {
    "3h": 0.45
  },
  "clouds": {
    "all": 92
  },
  "dt": 1499521932,
  "sys": {
    "message": 0.0034,
    "sunrise": 1499451436,
    "sunset": 1499503246
  },
  "id": 0,
  "name": "",
  "cod": 200
}

现在,我想要获得的输出是"Rain""main"对象的"weather"对象的属性(我希望我说的正确,我是一个初学者))。

从逻辑上讲,我会这样做:

$.getJSON("https://fcc-weather-api.glitch.me/api/current?lat=35&lon=139", function(json) {
  var data = JSON.stringify(json);
  alert(data["weather"].main);
});

但这并没有给我任何输出。

我做了一些搜索,发现我应该解析。

但是当我这样做的时候:

$.getJSON("https://fcc-weather-api.glitch.me/api/current?lat=35&lon=139", function(json) {
  var data = JSON.stringify(json);
  var Jason = JSON.parse(data);
  alert(Jason["weather"].main);
});

我再次获得了undefined作为我的输出。

那么,我的代码应该是什么样子,以便我的输出为"Rain"

PS:对不起,如果我在描述我的问题时犯了错误,我对JavaScript / jQuery很新,而且英语是我的第二语言。

2 个答案:

答案 0 :(得分:2)

你几乎拥有它,只需在访问天气后添加[0]。 由于天气是一个数组,你需要这个来从第一个元素获取数据:

$.getJSON("https://fcc-weather-api.glitch.me/api/current?lat=35&lon=139", 
    json => console.log(json.weather[0].main)
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

此外,getJSON函数已经为您解析了JSON,无需额外的JSON.parse

答案 1 :(得分:0)

JSON.Stringify会将json转换为字符串。如果要访问对象,则需要JSON对象而不是字符串。

weather是一个对象数组,您需要使用索引访问数组。如您所希望的第一个对象,请使用json["weather"][0]

$.getJSON("https://fcc-weather-api.glitch.me/api/current?lat=35&lon=139", function(json){
  alert(json["weather"][0].main);
});