Hola, necesito ayuda para comprender cómo puedo crear objetos a partir de datos JSON dados:
{ "type":"FeatureCollection", "features":[ { "type":"Feature", "properties":{ "dbh":6 }, "geometry":{ "type":"Point", "coordinates":[ -79.96474, 40.46283 ] } }, { "type":"Feature", "properties":{ "dbh":2 }, "geometry":{ "type":"Point", "coordinates":[ -80.00949, 40.42532 ] } }, { "type":"Feature", "properties":{ "dbh":12 }, "geometry":{ "type":"Point", "coordinates":[ -79.93531, 40.42282 ] } }He hecho lo siguiente:
let rsuCountsData = await axios.get('https://rsu-manager-apigateway 5xm3e3o5.uc.gateway.dev/rsucounts'); this.createGeoJson(rsuCountsData.data); //calling the below functionCreé la siguiente función para obtener el valor de count:
createGeoJson(data){ //geojson={} //extract the count from data and store it in a object for (let [key, value] of Object.entries(data)) { console.log(key, value.count); //key= ip address}
}
Ahora, dentro de esta función, quiero crear objetos a partir de los datos JSON anteriores, pero no estoy seguro de cómo hacerlo porque parece demasiado anidado para que lo descubra. A continuación se muestra lo que he hecho. Es una combinación de pseudocódigo y JS. Tampoco creo que sea correcto, pero alguien puede ayudarme a señalar en la dirección correcta cómo puedo almacenar estos valores en objetos JS dentro de la función createGeoJson:
geojson = {} geojson.type = "FeatureCollection" geojson.features = [] for key, val in data: feat.type = "Feature" props.count = val.count props.ipAddress = val.ipAddress// this is the key in above function. feat.properties = props geojson.features.append(feat)Gracias y agradezco cualquier aporte
Le sugiero que use JSON. parse () para convertir la cadena JSON en un objeto JS simple.
Después de eso, puede iterarlo con for...in , bucles o cualquier otro iterador .
En general, (después de analizar su cadena a través de JSON.parse() ) puede recorrer su matriz Object.feature con la función .forEach ( consulte la documentación de MDN ).
No estoy 100% seguro de cuál debería ser su resultado exacto, pero parece un buen caso de uso para la función .map() ( documentación de MDN aquí ). Digamos que tiene su JSON almacenado en const json , podría hacer algo como:
const json = { ... } const newArray = json.features.map(el => Object.assign({},{type: el.type, properties: el.properties, geoType: el.geometry.type})); newArray se llenará con Objetos creados a partir de Objetos vacíos y la función Object.assign() ( documentación de MDN )
EDITAR : también puede acceder al índice dentro de la función .map() para su contador.