Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

226
Visualizações
Javascript coloca datos json en html para cada problema

Estoy tratando de analizar el json a html.

  • Repetir los datos con una función forEach tiene un problema. ¿No estás seguro de por qué?
  • Además, los valores no se muestran correctamente.
  • Me gustaría poder mostrar los datos y enlazarlos en html.

 async function fetchData() { const response = await fetch('https://assets.cmcmarkets.com/json/cmc-test-most-popular-feed.json'); const data = await response.json(); console.log(data) data.forEach(obj => { Object.entries(data).forEach(([key, value]) => { console.log(`${key} ${value}`); const Name = document.querySelector('.name'), Code = document.querySelector('.code'), Spread = document.querySelector('.spread'), CellA = document.querySelector('.cellA'); if (key == "name") { Name.innerHTML = `<div>Name: ${value}</div>`; } if (key == "code") { Code.innerHTML = `<div>Code: ${value}</div>`; } if (key == "spread") { Spread.innerHTML = `<div>Spread: ${value}</div>`; } else if (key == "1day") { } // data["X-ABFDN"]['1day'] data["X-ABAAA"]['1day'] data["X-AQWER"]['1day'] else if (key == "1day") { CellA.innerHTML = `<div>movement: ${data[key]["movement"]}</div><div>price: ${data[key]["price"]}</div>`; } }); }); } fetchData();
 <div class="name"></div> <div class="code"></div> <div class="spread"></div> <div class="cellA"></div>

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Prueba esto. Tenga en cuenta que cada vez que pasa por el ciclo, está reemplazando los valores de iteración anteriores con contenido nuevo, lo cual no es lo ideal. Probablemente tendrá que crear nuevos elementos de salida para cada iteración a través del bucle.

 async function fetchData() { const response = await fetch('https://assets.cmcmarkets.com/json/cmc-test-most-popular-feed.json'); const data = await response.json(); console.log(data) Object.entries(data).forEach(([key, obj]) => { const Name = document.querySelector('.name'), Code = document.querySelector('.code'), Spread = document.querySelector('.spread'), CellA = document.querySelector('.cellA'); Name.innerHTML = `<div>Name: ${obj.name}</div>`; Code.innerHTML = `<div>Code: ${obj.code}</div>`; Spread.innerHTML = `<div>Spread: ${obj.spread}</div>`; CellA.innerHTML = `<div>Movement: ${obj['1day'].movement}</div><div>Price: ${obj['1day'].price}</div>`; }); } fetchData();
about 4 years ago · Juan Pablo Isaza Relatório

0

El value en sí mismo es un object , por lo que si desea mostrar su name , debe usar value.name . Elimine un nivel forEach de su código e itere a través de las claves/valores de los datos recuperados (donde cada valor es un object ).

Con eso en mente, una forma de mostrar datos es crear un bloque de elementos por entrada de objeto, usando insertAdjacentHTML . Algo como:

 fetchData(); async function fetchData() { const data = await fetch( 'https://assets.cmcmarkets.com/json/cmc-test-most-popular-feed.json' ) .then( r => r.json() ); Object.entries(data).forEach( ([key, value]) => document.body.insertAdjacentHTML(`beforeend`, ` <div class="datablock"> <div class="name">Name: ${value.name}</div> <div class="code">Code: ${value.code}</div> <div class="spread">Spread: ${value.spread}</div> ${value.cellA ? `<div class="cellA">cellA: ${value.cellA}</div>` : ``} ${value["1day"] ? ` <div class="movement">Movement: ${ value["1day"].movement}</div> <div class="price">Price: ${ value["1day"].price || `unknown`}</div>` : ``} </div>`) ); }
 body { margin: 2rem; font: 12px/15px verdana, arial; } .datablock { margin-bottom: 0.7rem; }

about 4 years ago · Juan Pablo Isaza Relatório

0

Tiene dos bucles .forEach() en 'datos' y en los objetos que los contienen. Ambos son objetos, que no puede iterar directamente. Usar

 Object.keys(obj) Object.values(obj) Object.entries(obj)

Para obtener una matriz iterable con los datos

En el fragmento a continuación, este problema se resuelve y se muestra un objeto. Pero todavía hay un problema lógico. Solo tiene cuatro divs, que está rellenando en cada ronda, por lo que al final solo se ven los datos del último.

No corregiré esto ya que creo que el problema principal se resuelve con esto.

 async function fetchData() { const response = await fetch('https://assets.cmcmarkets.com/json/cmc-test-most-popular-feed.json'); const data = await response.json(); console.log('data', data) Object.values(data).forEach(obj => { Object.entries(obj).forEach(([key, value]) => { // console.log(key, value); const Name = document.querySelector('.name'), Code = document.querySelector('.code'), Spread = document.querySelector('.spread'), CellA = document.querySelector('.cellA'); if (key == "name") { Name.innerHTML = `<div>Name: ${value}</div>`; } if (key == "code") { Code.innerHTML = `<div>Code: ${value}</div>`; } if (key == "spread") { Spread.innerHTML = `<div>Spread: ${value}</div>`; } else if (key == "1day") { } // data["X-ABFDN"]['1day'] data["X-ABAAA"]['1day'] data["X-AQWER"]['1day'] else if (key == "1day") { CellA.innerHTML = `<div>movement: ${data[key]["movement"]}</div><div>price: ${data[key]["price"]}</div>`; } }); }); } fetchData();
 <div class="name"></div> <div class="code"></div> <div class="spread"></div> <div class="cellA"></div>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda