Estoy trabajando en un NodeJS. Quiero tomar datos de data.json , un archivo JSON con coordenadas (lat y lon) y usarlos para mostrar el clima y otras cosas, usando Open Weather API . Espero traer esas coordenadas del JSON y luego crear los objetos, pero obtengo mis datos como indefinidos:
Official Id: undefined https://api.openweathermap.org/data/2.5/onecall?lat=undefined&lon=undefined&exclude=hourly,daily&appid=123 Aquí hay un pequeño ejemplo de data.json :
[ { "latjson": 1, "lonjson": 1, "IdOficina": "1" }, { "latjson": 2, "lonjson": 2, "IdOficina": "2" } ]y así es como intento guardar esos datos en una constante
function calcWeather1() { var data = fs.readFileSync("./json/data.json", "utf8"); /*const data = [{ "latjson": "33.44", "lonjson": "-94.04", "IdOficina": "1" }, { "latjson": 2, "lonjson": 2, "IdOficina": "2" } ];*/ for (let item of data) { let url = `https://api.openweathermap.org/data/2.5/onecall?lat=${item.latjson}&lon=${item.lonjson}&exclude=hourly,daily&appid=123`; console.log(`Official Id: ${item.IdOficina}`); console.log(url); console.log('-----------'); } }El problema es que, cuando envío los datos JSON como me dijo Randy:
/*const data = [{ "latjson": "33.44",Yo obtengo:
Official Id: 1 https://api.openweathermap.org/data/2.5/onecall?lat=33.44&lon=-94.04&exclude=hourly,daily&appid=123funciona, pero cuando lo tomo de un archivo JSON, como:
var data = fs.readFileSync("./json/data.json", "utf8");yo obtengo
Official Id: undefined https://api.openweathermap.org/data/2.5/onecall?lat=undefined&lon=undefined&exclude=hourly,daily&appid=123 -----------EDITAR: Traté de traer datos como Randy me dijo:
const json = fs.readFileSync("./json/data.json", "utf8"); const data = JSON.parse(json); for (let item of data) {... y sigue siendo undefined
EDITAR: aquí está mi data.json , agregué la forma en que está estructurado aquí, pero aquí está el archivo
EDITAR: OP no ha analizado la cadena JSON del archivo, agregando esas instrucciones. Al leer el archivo, lo lee como una cadena, debe analizarse en un objeto JavaScript. Use JSON.parse() para lograr ese objetivo.
const json = fs.readFileSync("./json/data.json", "utf8"); const data = JSON.parse(json); Ahora la variable data contiene la matriz de objetos. Si observa el primer elemento de la matriz y solicita su jsonlat , debería devolver los datos correctos:
data[0].latjsonAhora está listo para continuar con las siguientes instrucciones:
No está analizando la matriz correctamente. Teniendo en cuenta los comentarios y el cambio en la estructura de datos discutidos allí, estos son los datos para analizar:
[ { "latjson": 1, "lonjson": 1, "IdOficina": "1" }, { "latjson": 2, "lonjson": 2, "IdOficina": "2" } ]En lugar de usar for...in , realmente debería usar for...of , lo hará más fácil y lo mantendrá fuera de problemas en el futuro con otra codificación que haga.
Así es como se vería:
const fakeAPIKey = 12342456478; const data = [{ "latjson": "33.44", "lonjson": "-94.04", "IdOficina": "1" }, { "latjson": 2, "lonjson": 2, "IdOficina": "2" } ]; for (let item of data) { let url = `https://api.openweathermap.org/data/2.5/onecall?lat=${item.latjson}&lon=${item.lonjson}&exclude=hourly,daily&appid=${fakeAPIKey}`; console.log(`Official Id: ${item.IdOficina}`); console.log(url); console.log('-----------'); }{"cod":"400","message":"wrong latitude"} está recibiendo una respuesta de solicitud incorrecta de la API. Parece del mensaje de error que la latitud es incorrecta