javascript - 如何将 JSON 中的数据显示到 html 表中

标签 javascript html arrays json reactjs

Everything is good i just need those marked names in each row to ne in a column under schoolClassName我试图将 json 数据显示到 html 表中,schoolClasseName 显示为表头(th),属于特定 schoolClass 的学生(学生名字)显示在表头下的一列中 - schoolClassName。

showGrades = (myJson) => {
    console.log(myJson);
    var cardContainer = document.getElementById('card-holder');
    console.log(cardContainer)
    cardContainer.style.display = "none";
    var contentSection = document.getElementById("content-section");
    console.log(contentSection)
    var para = document.createElement("div");
    para.className += "studentsFromDb";
    contentSection.appendChild(para);
    var t = "";
    myJson.forEach(element => {

        var container = "<div>"
        container += "<h1> Grade Number" + element.gradeNumber + "</h1>"
        container += "<table><tr>" + element.schoolClasses.map((el) => {
                return "<th>" + el.schoolClassName + "</th>"
            }) + "</tr>" + element.schoolClasses.map((el) => {

                return el.students.map((el) => {
                    return "<td>" + el.firstName + "</td>"
                    })
            }) + "</table>"

        container += "</div>";
        t += container;
    });
    para.innerHTML += t;             
}


My JSon file:
[
    {
        "schoolClasses": [
            {
                "students": [
                    {                           
                        "firstName": "Svetislav"
                   },
                    {                            
                        "firstName": "Gavrilo"
                    },
                    {                            
                        "firstName": "Milos"
                    },
                    {                            
                        "firstName": "Marko"
                    }
                ],
                "id": 1,
                "schoolClassName": "fifthThree",
                "gradeId": 1
            },
            {
                "students": [
                    {                                                        
                        "firstName": "Mladen"
                    },
                    {
                        "firstName": "Zoran"
                    },
                    {
                        "firstName": "Boban"                           
                    },
                    {
                        "firstName": "Goran"
                    }
                ],
                "id": 2,
                "schoolClassName": "fifthOne",
                "gradeId": 1
            },
            {
                "students": [
                    {
                        "firstName": "Milovan"
                    },
                    {
                        "firstName": "Jorgovan"                            
                    },
                    {                           
                        "firstName": "Jovan"

                    }
                ],
                "id": 3,
                "schoolClassName": "fifthTwo",
                "gradeId": 1
            }
        ],

        "id": 1,
        "gradeNumber": 5
    },

grade 6
    {
        "schoolClasses": [
            {
                "students": [
                    {                           
                        "firstName": "Branimir"
                    },
                    {
                       "firstName": "Stanislava"
                    },
                    {                           
                        "firstName": "Zorana"
                    },
                    {                           
                        "firstName": "Zvezdana"
                    }
                ],
                "id": 4,
                "schoolClassName": "sixthOne",
                "gradeId": 2
            },
            {
                "students": [
                    {                            
                        "firstName": "Dragana"                            
                    },
                    {                         
                        "firstName": "Ivana"                           
                    },
                    {

                        "firstName": "Mirjana"
                    },
                    {

                        "firstName": "Milica"

                    }
                ],
                "id": 5,
                "schoolClassName": "sixthTwo",
                "gradeId": 2
            },
            {
                "students": [
                    {

                        "firstName": "Marijana"
                    },
                    {

                        "firstName": "Dobrila"
                    },
                    {

                        "firstName": "Marija"
                    },
                    {

                        "firstName": "Dobrila"

                    }
                ],
                "id": 6,
                "schoolClassName": "sixthThree",
                "gradeId": 2
            },
            {
                "students": [
                    {

                        "firstName": "Svetislava"
                    },
                    {

                        "firstName": "Milica"
                    },
                    {

                        "firstName": "Zlatija"
                    },
                    {

                        "firstName": "Serafina"                       
                    }
                ],
                "id": 7,
                "schoolClassName": "sixthFour",
                "gradeId": 2
            }
        ],
        "id": 2,
        "gradeNumber": 6
    }
]

我有 3 个 th 但我有更多数据,它是这样的

FirstSchoolClass SecondSchoolClass ThirdSchoolClass 
Michael          Stefany           Monica          Stephan Mike Taylor etc ..

我需要在 3 个 td 之后用 3 个 td 构建新的 tr

最佳答案

如果我没有正确理解你的问题,问题是代码只创建一行并附加许多 td 单元格,你需要每个 student 数组排在新的一行。

您只需要在映射内部 schoolClasses 之前添加打开 tr 并在之后添加关闭 tr 。我还添加了 .join('') 以删除附加到 HTML 的逗号 ,。 (我还将 json 数组命名为 “grades” 以使 json 在此示例中有效)。

请参阅下面的代码段。

showGrades = (myJson) => {
    var cardContainer = document.getElementById('card-holder');
    cardContainer.style.display = "none";
    var contentSection = document.getElementById("content-section");
    var para = document.createElement("div");
    para.className += "studentsFromDb";
    contentSection.appendChild(para);
    var t = "";
    myJson["grades"].forEach(element => {
        var container = "<div>";
        container += "<h1> Grade Number" + element.gradeNumber + "</h1>";
        container += "<table><tr>" + element.schoolClasses.map((el) => 
            {
                return "<th>" + el.schoolClassName + "</th>"
            }).join('') + "</tr><tr>" + element.schoolClasses.map((el) => 
            {  // added tr here  ^^    
                return el.students.map((el) => 
                {
                    return "<td>" + el.firstName + "</td>"
                }).join('') + "</tr>"; // added join('') and '</tr>'            
            }).join('') + "</table>";  // added join('')

            container += "</div>";
            t += container;
        });
        para.innerHTML += t;             
    }

var json = {
     "grades": [{
        "schoolClasses": [{
            "students": [
                   {
                        "firstName": "Svetislav"
                   }, {
                        "firstName": "Gavrilo"
                    }, {
                        "firstName": "Milos"
                    }, {
                        "firstName": "Marko"
                    }
                ],
                "id": 1,
                "schoolClassName": "fifthThree",
                "gradeId": 1
            }, {
                "students": [
                    {
                        "firstName": "Mladen"
                    }, {
                        "firstName": "Zoran"
                    }, {
                        "firstName": "Boban"
                    }, {
                        "firstName": "Goran"
                    }
                ],
                "id": 2,
                "schoolClassName": "fifthOne",
                "gradeId": 1
            }, {
                "students": [{
                        "firstName": "Milovan"
                    }, {
                        "firstName": "Jorgovan"
                    }, {
                        "firstName": "Jovan"
                    }
                ],
                "id": 3,
                "schoolClassName": "fifthTwo",
                "gradeId": 1
            }
        ],

        "id": 1,
        "gradeNumber": 5
    }, {
        "schoolClasses": [{
                "students": [{
                        "firstName": "Branimir"
                    }, {
                        "firstName": "Stanislava"
                    }, {
                        "firstName": "Zorana"
                    }, {
                        "firstName": "Zvezdana"
                    }
                ],
                "id": 4,
                "schoolClassName": "sixthOne",
                "gradeId": 2
            }, {
                "students": [{
                        "firstName": "Dragana"
                    }, {
                        "firstName": "Ivana"
                    }, {

                        "firstName": "Mirjana"
                    }, {
                        "firstName": "Milica"
                    }
                ],
                "id": 5,
                "schoolClassName": "sixthTwo",
                "gradeId": 2
            }, {
                "students": [{
                        "firstName": "Marijana"
                    }, {
                        "firstName": "Dobrila"
                    }, {
                        "firstName": "Marija"
                    }, {
                        "firstName": "Dobrila"
                    }
                ],
                "id": 6,
                "schoolClassName": "sixthThree",
                "gradeId": 2
            }, {
                "students": [{
                        "firstName": "Svetislava"
                    }, {
                        "firstName": "Milica"
                    }, {
                        "firstName": "Zlatija"
                    }, {
                        "firstName": "Serafina"
                    }
                ],
                "id": 7,
                "schoolClassName": "sixthFour",
                "gradeId": 2
         }
      ],
      "id": 2,
      "gradeNumber": 6
    }
  ]
}

// run code
showGrades(json);
<div id="content-section"></div>
<div id="card-holder"></div>

关于javascript - 如何将 JSON 中的数据显示到 html 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58249541/

相关文章:

javascript - 使用 webpack 将所有 js 文件构建到目标文件夹

javascript - 使用 document.getElementById 不起作用

javascript - 使用 OOP 编写 jQuery 插件

javascript - 对象不支持属性或方法 'values'

html - 更改图像和侧边栏

Javascript 减少功能后不起作用?

javascript - EaselJS 自定义字体行高跨浏览器问题

javascript - 如何读取本地文本文件?

c - 在C中返回-1?

c - 将 csv 文件的输入解析为 char 数组