Есть много способов, к которым можно приблизиться - простым решением было бы сериализовать JSON в строку и отобразить это в вашем документе напрямую, используя JSON .stringify. () метод:
document.getElementById("stats").innerText = JSON.stringify(statsData.players);
const statsData = {
players: [{
player: {
info: {
positionInfo: "Defender"
},
name: {
first: "Toby",
last: "Alderweireld"
},
currentTeam: {
name: "Tottenham Hotspur"
}
},
stats: [{
name: "goals",
value: 5
},
{
name: "losses",
value: 20
},
{
name: "wins",
value: 48
},
{
name: "draws",
value: 23
}
]
},
{
player: {
info: {
positionInfo: "Midfielder"
},
name: {
first: "Yaya",
last: "Toure"
},
currentTeam: {
name: "Manchester City"
}
},
stats: [{
name: "goals",
value: 65
},
{
name: "losses",
value: 49
},
{
name: "wins",
value: 149
},
{
name: "draws",
value: 35
}
]
},
{
player: {
info: {
positionInfo: "Attacker"
},
name: {
first: "Riyad",
last: "Mahrez"
},
currentTeam: {
name: "Leicester City"
}
},
stats: [{
name: "goals",
value: 22
},
{
name: "losses",
value: 23
},
{
name: "wins",
value: 35
},
{
name: "draws",
value: 21
}
]
}
]
};
document.getElementById("stats").innerText = JSON.stringify(statsData.players);
<header>
<h1 id="selectPlayer">Select a player...</h1>
</header>
<div id="stats"></div>
Однако лучшим подходом было бы представление данных JSON в более удобочитаемом виде. Чтобы сделать это, вам обычно нужно «l oop» над коллекцией (массивом) данных, где для каждого элемента массива вы делаете дополнительную обработку, чтобы сделать данные более читабельными.
Например, вы можете сделать что-то вроде следующего, чтобы отобразить данные JSON в таблице HTML:
/* Assuming you've replaced the stats element with a table */
const table = document.getElementById("stats");
/* Loop through each item of statsData object */
statsData.players.forEach(item => {
/* Extract info and name objects from player (optional) */
const { info, name } = item.player;
/* Add row to table for current player */
const row = table.insertRow();
/* Add cell for name/position to row */
const cellName = row.insertCell(0);
const cellPosition = row.insertCell(1);
/* Fill each cell with data from current player data */
cellName.innerText = name.first;
cellPosition.innerText = info.positionInfo;
});
Полный рабочий пример приведен ниже:
const statsData = {
players: [{
player: {
info: {
positionInfo: "Defender"
},
name: {
first: "Toby",
last: "Alderweireld"
},
currentTeam: {
name: "Tottenham Hotspur"
}
},
stats: [{
name: "goals",
value: 5
},
{
name: "losses",
value: 20
},
{
name: "wins",
value: 48
},
{
name: "draws",
value: 23
}
]
},
{
player: {
info: {
positionInfo: "Midfielder"
},
name: {
first: "Yaya",
last: "Toure"
},
currentTeam: {
name: "Manchester City"
}
},
stats: [{
name: "goals",
value: 65
},
{
name: "losses",
value: 49
},
{
name: "wins",
value: 149
},
{
name: "draws",
value: 35
}
]
},
{
player: {
info: {
positionInfo: "Attacker"
},
name: {
first: "Riyad",
last: "Mahrez"
},
currentTeam: {
name: "Leicester City"
}
},
stats: [{
name: "goals",
value: 22
},
{
name: "losses",
value: 23
},
{
name: "wins",
value: 35
},
{
name: "draws",
value: 21
}
]
}
]
};
const table = document.getElementById("stats");
/* Loop through each player of statsData object */
statsData.players.forEach(item => {
/* Extract info and name objects from player (optional) */
const { info, name } = item.player;
/* Add row to table for current player */
const row = table.insertRow();
/* Add cell for name/position to row */
const cellName = row.insertCell(0);
const cellPosition = row.insertCell(1);
/* Fill each cell with data from current player data */
cellName.innerText = name.first;
cellPosition.innerText = info.positionInfo;
});
<header>
<h1 id="selectPlayer">Select a player...</h1>
</header>
<table id="stats">
<thead><td>Name</td><td>Position</td></thead>
</table>
Надеюсь, это поможет!