Tengo una respuesta de API donde JSON no está en una matriz, algo como a continuación

{
  "TV": {
    "USD": 9677.25,
    "EUR": 7768.87,
    "JPY": 1072773.87,
    "GBP": 6898.93,
    "AUD": 12294.15,
    "CAD": 12056.19
},
 "Lamp": {
    "USD": 231.35,
    "EUR": 185.89,
    "JPY": 25735.85,
    "GBP": 168.82,
    "AUD": 296.7,
    "CAD": 283
  }
}

Si es una matriz, puedo usar la función .map, pero en este escenario, ¿cómo puedo mostrar los datos mientras los hago en bucle, ya que los datos provenientes de la API pueden ser diferentes en cada llamada?

El formato deseado que estoy buscando es

[{
    "PRODUCT": "TV",
    "PRICE": {
        "USD": 9677.25,
        "EUR": 7768.87,
        "JPY": 1072773.87,
        "GBP": 6898.93,
        "AUD": 12294.15,
        "CAD": 12056.19
    }
}, {
    "PRODUCT": "Lamp",
    "PRICE": {
        "USD": 231.35,
        "EUR": 185.89,
        "JPY": 25735.85,
        "GBP": 168.82,
        "AUD": 296.7,
        "CAD": 283
    }
}]

Por favor, ayúdeme.

0
socialCoder 15 feb. 2018 a las 07:25

2 respuestas

La mejor respuesta

Puede usar Object.keys() para iterar a través de cada clave de sus datos y luego, usando array#map, puede crear una matriz resultante con sus objetos.

var data = { "TV": { "USD": 9677.25, "EUR": 7768.87, "JPY": 1072773.87, "GBP": 6898.93, "AUD": 12294.15, "CAD": 12056.19 }, "Lamp": { "USD": 231.35, "EUR": 185.89, "JPY": 25735.85, "GBP": 168.82, "AUD": 296.7, "CAD": 283 } },
  result = Object.keys(data).map(k => ({PRODUCT: k, PRICE: data[k]}));
console.log(result);
1
Hassan Imam 15 feb. 2018 a las 06:33

Puede recuperar las claves de las propiedades de nivel superior del objeto JSON.

var payload = {
  "TV": {
    "USD": 9677.25,
    "EUR": 7768.87,
    "JPY": 1072773.87,
    "GBP": 6898.93,
    "AUD": 12294.15,
    "CAD": 12056.19
},
 "Lamp": {
    "USD": 231.35,
    "EUR": 185.89,
    "JPY": 25735.85,
    "GBP": 168.82,
    "AUD": 296.7,
    "CAD": 283
  }
}

var keys = Object.keys(payload)

Ahora puede mapear estas claves y usarlas para hacer referencia a la carga útil. Entonces, por ejemplo, si quisiera crear una matriz con el costo en USD de cada artículo.

var usdCost = keys.map(function (key) {
  return {
    item: key,
    usd: payload[key].USD
  }
})

// [{
//   item: "TV",
//   usd: 9677.25
// }, {
//   item: "Lamp",
//   usd: 231.35
// }]
0
FuriousD 15 feb. 2018 a las 05:11