开发者问题收集

我如何将 JSON 文件中的值传递给 const?

2021-09-28
1604

我目前正在开展一个项目,我需要从 JSON 文件中获取数据,以便在 API 的获取中使用该数据(这可行),我需要从 JSON 文件中获取的数据是 latjson lonjson ,并将它们放入 const lat: info.latjson const lon: info.latjson 中,我尝试了这个,我的错误是 Uncaught (in promise) TypeError: Cannot read property 'lat' of undefined (在“const: base....”行中)

这是我的 JSON 文件:

[
    {   
        "latjson": 21.1524,
        "lonjson": -101.7108
    },
    {
        "latjson": 21.1447,
        "lonjson":-101.6852
    }, 
    {
        "latjson": 21.1155,
        "lonjson": -101.6575
    }
]

这是我的脚本

function calcWeather(){ 
    let info  = ''

    fetch('../js/data.json') // fetch editable c:
    .then(function(response) {
        return response.json();
     })
    .then(function(myJson) {
        info = myJson
        console.log(info)
    });
     

    const lat = info.latjson;
    const long = info.lonjson;

    const base = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${long}&appid=${api_key}&units=metric&lang=sp`;
}
3个回答

Fetch 异步运行,因此当您访问“info.latjson”时,不能保证 fetch 已经运行并将结果 JSON 分配给您的“info”对象。

将 fetch 下方的代码移到第二个回调中,或者使用 async await:

async function calcWeather(){ 
    const response = await fetch('../js/data.json');
    const info = await response.json();     

    const lat = info.latjson;
    const long = info.lonjson;

    const base = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${long}&appid=${api_key}&units=metric&lang=sp`;
}
Marcel Herd
2021-09-28

您犯了 2 个错误,

  1. 您在异步进程之外读取了值
  2. 您读取的是数组值,而不是对象

这可能对您有帮助

async function calcWeather(){ 

  const info = await fetch('../js/data.json') // fetch editable c:
  .then(function(response) {
      return response.json();
   });
 
  // Here's is simple way to access index 0
  const lat = info[0].latjson;
  const long = info[0].lonjson;

  const base = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${long}&appid=${api_key}&units=metric&lang=sp`;
}
Mochamad Faishal Amir
2021-09-28

您需要将纬度和经度的值存储在数组中。

const lat = info.map((obj) => { return obj.latjson; });

const lon = info.map((obj) => { return obj.lonjson; });
Pranit Chavan
2021-09-28