Как получить доступ к вложенным массивам? - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь получить доступ к вложенным массивам в JavaScript из JSON, возвращенного из приложения погоды.Однако я не могу получить доступ к каким-либо данным без консоли, возвращающей cannot return property of 'x' of undefined.Я вполне уверен, что проблема заключается в том, как я взаимодействую с result, но я не уверен.Кто-нибудь знает, как я могу правильно получить доступ к данным из вложенного массива?

Вот мой код, который в настоящее время не работает:

const weather = require('weather-js');

var val;
var temp;
var final;

weather.find({search: 'Oceanside, CA', degreeType: 'F'}, function(err, result){         
  if (err) console.log(err);

  obj = JSON.stringify(result, null, 2);
  temp = result[2].current.temperature;
  console.log(temp);
  final = result[1].location.name;
  console.log(final)
});

А вот JSON, с которым я пытаюсь взаимодействоватьwith:

[
  {
    "location": {
      "name": "Oceanside, CA",
      "lat": "33.197",
      "long": "-117.381",
      "timezone": "-8",
      "alert": "",
      "degreetype": "F",
      "imagerelativeurl": "http://blob.weather.microsoft.com/static/weather4/en-us/"
    },
    "current": {
      "temperature": "55",
      "skycode": "31",
      "skytext": "Mostly Clear",
      "date": "2018-12-18",
      "observationtime": "22:15:00",
      "observationpoint": "Oceanside, CA",
      "feelslike": "55",
      "humidity": "90",
      "winddisplay": "3 mph Southwest",
      "day": "Tuesday",
      "shortday": "Tue",
      "windspeed": "3 mph",
      "imageUrl": "http://blob.weather.microsoft.com/static/weather4/en-us/law/31.gif"
    },
    "forecast": [
      {
        "low": "46",
        "high": "64",
        "skycodeday": "29",
        "skytextday": "Partly Cloudy",
        "date": "2018-12-17",
        "day": "Monday",
        "shortday": "Mon",
        "precip": ""
      },
      {
        "low": "45",
        "high": "65",
        "skycodeday": "34",
        "skytextday": "Mostly Sunny",
        "date": "2018-12-18",
        "day": "Tuesday",
        "shortday": "Tue",
        "precip": "0"
      },
      {
        "low": "44",
        "high": "67",
        "skycodeday": "34",
        "skytextday": "Mostly Sunny",
        "date": "2018-12-19",
        "day": "Wednesday",
        "shortday": "Wed",
        "precip": "0"
      },
      {
        "low": "47",
        "high": "69",
        "skycodeday": "30",
        "skytextday": "Partly Sunny",
        "date": "2018-12-20",
        "day": "Thursday",
        "shortday": "Thu",
        "precip": "0"
      },
      {
        "low": "47",
        "high": "65",
        "skycodeday": "34",
        "skytextday": "Mostly Sunny",
        "date": "2018-12-21",
        "day": "Friday",
        "shortday": "Fri",
        "precip": "0"
      }
    ]
  }
]

Этот вопрос не является дубликатом объектов Access / process (вложенных), массивов или JSON, поскольку, насколько я вижу, ответы на этой странице касаются массивов из более чем одного элементаи этот вопрос не.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Все довольно просто.Скажем, массив в JavaScript определен как var myArray=[]

. Вы заметите, что ваш JSON имеет внешний [], и в этом у вас есть 1 внешний {}, то есть 1 элемент в массиве с индексом 0.

Таким образом, вместо выполнения result[2].current.temperature; просто выполните result[0].current.temperature;

с использованием result[2] даст вам неопределенное значение, поскольку его не существует!

0 голосов
/ 19 декабря 2018

//try this its working
var j = [{
  "location": {
    "name": "Oceanside, CA",
    "lat": "33.197",
    "long": "-117.381",
    "timezone": "-8",
    "alert": "",
    "degreetype": "F",
    "imagerelativeurl": "http://blob.weather.microsoft.com/static/weather4/en-us/"
  },
  "current": {
    "temperature": "55",
    "skycode": "31",
    "skytext": "Mostly Clear",
    "date": "2018-12-18",
    "observationtime": "22:15:00",
    "observationpoint": "Oceanside, CA",
    "feelslike": "55",
    "humidity": "90",
    "winddisplay": "3 mph Southwest",
    "day": "Tuesday",
    "shortday": "Tue",
    "windspeed": "3 mph",
    "imageUrl": "http://blob.weather.microsoft.com/static/weather4/en-us/law/31.gif"
  },
  "forecast": [{
      "low": "46",
      "high": "64",
      "skycodeday": "29",
      "skytextday": "Partly Cloudy",
      "date": "2018-12-17",
      "day": "Monday",
      "shortday": "Mon",
      "precip": ""
    },
    {
      "low": "45",
      "high": "65",
      "skycodeday": "34",
      "skytextday": "Mostly Sunny",
      "date": "2018-12-18",
      "day": "Tuesday",
      "shortday": "Tue",
      "precip": "0"
    },
    {
      "low": "44",
      "high": "67",
      "skycodeday": "34",
      "skytextday": "Mostly Sunny",
      "date": "2018-12-19",
      "day": "Wednesday",
      "shortday": "Wed",
      "precip": "0"
    },
    {
      "low": "47",
      "high": "69",
      "skycodeday": "30",
      "skytextday": "Partly Sunny",
      "date": "2018-12-20",
      "day": "Thursday",
      "shortday": "Thu",
      "precip": "0"
    },
    {
      "low": "47",
      "high": "65",
      "skycodeday": "34",
      "skytextday": "Mostly Sunny",
      "date": "2018-12-21",
      "day": "Friday",
      "shortday": "Fri",
      "precip": "0"
    }
  ]
}];
console.log(j[0].current.temperature);
console.log(j[0].location.name);
...