0

Me llega un JSON de la siguiente forma:

{1: "uno", 2: "dos", 3: "tres"}

Quiero convertirlo a:

[{
    id: "1",
    value: "uno"
},
{
    id: "2",
    value: "dos"
},
{
    id: "3",
    value: "tres"
}];

Encontré esto para Angular: Convertir JSON a array de objetos

Entiendo que debería hacer algo asi:

let resultado = []

Object.entries(JSON).forEach(([key, value]) => {
    resultado.push({
        id: ${key}, 
        value: ${value}
    }),
});

No está funcionando, ya que no me acepta el push de ese modo. Lo busqué pero no puedo encontrar como generar el push con el id y value.

Martin G.
  • 21
  • 3
  • [JSON != Javascript Object](https://es.stackoverflow.com/questions/164943/cu%c3%a1l-es-la-diferencia-entre-json-y-un-objeto) – Pablo Lozano Feb 04 '22 at 15:06
  • 1
    ${key} es una interpolación que sólo es necesaria dentro de un *template string*, ahí sobran las llaves – Pablo Lozano Feb 04 '22 at 15:07

3 Answers3

0

Para el que lo necesite:

Object.entries(props.value).forEach(([key, v]) => {
    names.push({id:key,value:v});
});

Mediante el código anterior, se convierte un objeto JSON simple en un array de objetos.

Las palabras claves ID y VALUE se insertan en los objetos de la siguiente forma:

[{ 
    id: 1, 
    value: uno 
}]

Y asi por cada valor del JSON

Martin G.
  • 21
  • 3
  • Podrias editar tu respuesta y agregar una explicacion de que hace este fragmento de codigo por favor? De ese modo tu respuesta sera de mejor calidad, sera mejor recibida por la comunidad y otras personas podrian aprender algo nuevo. – Dante S. Feb 11 '22 at 00:55
0

puedes intentar hacer lo siguiente:

// Obtienes tu JSON desde tu API etc.
fetch("https://jsonplaceholder.typicode.com/users") // 1
.then(response => response.json()) // 2
.then(data =>{
  // Crear nuevo arreglo vacio
  let newArray = [];
  
  /* Iteras la respuesta de tu request con forEach
   * Realizas un push de cada iteración a tu nuevo arreglo
   */
  
  data.forEach((item)=>{
    newArray.push(item)

   // 1.- Para hacer un push de un atributo en particular acceder al eletemento actual y con "." a la propiedad deseada :
   newArray.push(item.city)

   // 2.- Para hacer un push de varios atributos puedes crear ub objeto anonimo :
   let obj = {city: item.city, street: item.street}
   newArray.push(obj)
  })

  
  // Imprimes tu arreglo para corroborar resultado.
  console.log(newArray)
  
})
0

Necesitas sacar las llaves del objeto y hacer un arreglo, luego asignar valores. Te dejo un ejemplo documentado

const data = {1: "uno", 2: "dos", 3: "tres"};

const resultado = 
Object.keys(data) // Primero obtienes las llaves del objeto, es decir 1,2,3 en un array
.map( key => ({ id: key, value: data[key]  }) ); // Luego lo ciclas y haces un nuevo array, referenciando al original

console.log(resultado);
Alberto Siurob
  • 6,620
  • 4
  • 22
  • 59