【问题标题】:How to create HTML table based on JSON [closed]如何基于 JSON 创建 HTML 表 [关闭]
【发布时间】:2017-07-22 08:04:27
【问题描述】:

我需要根据JSON 输入创建HTML 表。这是我的JSON 示例输入。

[
  {
    "UserID": 1,
    "UserName": "rooter",
    "Password": "12345",
    "Country": "UK",
    "Email": "sac@gmail.com"
  },
  {
    "UserID": 2,
    "UserName": "binu",
    "Password": "123",
    "Country": "uk",
    "Email": "Binu@gmail.com"
  },
  {
    "UserID": 3,
    "UserName": "cal",
    "Password": "123",
    "Country": "uk",
    "Email": "cal@gmail.com"
  },
  {
    "UserID": 4,
    "UserName": "nera",
    "Password": "1234",
    "Country": "uk",
    "Email": "nera@gmail.com"
  }
]

预期结果:

我需要在网页加载时执行此操作。

【问题讨论】:

  • 您有什么具体的事情需要帮助吗?您能否与我们分享您所做的任何尝试?如果我们了解您选择的方向,帮助会容易得多。
  • 所以循环并建立一个表。你知道如何遍历数组吗?你知道如何构建字符串吗?
  • 我认为如果你不知道密钥,你必须使用递归来做到这一点
  • @MaciejKozieja - 这里不需要递归。 Object.keys() 将为您获取对象的所有键 - 然后您可以像普通数组一样迭代它们。
  • @epascarello 不,我不认识朋友 :( 你能给我一些示例代码吗

标签: javascript jquery html json


【解决方案1】:

遍历 JSON 数组中的所有元素,并将所有不同的键保存到 javascript 数组或类似数组中。

然后,使用所有这些键创建带有列的表格和表格标题行。

然后,遍历所有 JSON 对象并为每个对象打印一行。

var data = [
  {
    "UserID": 1,
    "UserName": "rooter",
    "Password": "12345",
    "Country": "UK",
    "Email": "sac@gmail.com"
  },
  {
    "UserID": 2,
    "UserName": "binu",
    "Password": "123",
    "Country": "uk",
    "Email": "Binu@gmail.com"
  },
  {
    "UserID": 3,
    "UserName": "cal",
    "Password": "123",
    "Country": "uk",
    "Email": "cal@gmail.com"
  },
  {
    "UserID": 4,
    "UserName": "nera",
    "Password": "1234",
    "Country": "uk",
    "Email": "nera@gmail.com"
  }
];

var keys = [];

document.write("<table border==\"1\"><tr>");
for (key in data[0]) {
	document.write('<td>' + key + '</td>');
}
document.write("</tr>");
for (var i = 0; i < data.length; i++) {
	document.write('<tr>');
	for (key in data[i]) {
  	document.write('<td>' + data[i][key] + '</td>');
  }
	document.write('</tr>');
}
document.write("</table>");

【讨论】:

  • 谢谢 tilz0R,你能给我一些示例代码吗,拜托:(
  • 我已经更新了我的帖子。 Downwoter,我们有理由投反对票吗?
  • 需要更多证据吗? screencloud.net/v/io3lk 不知道你从哪里听到的信息。仍然不知道为什么投反对票。
  • @tilz0R - 好像我说得太早了!为混乱道歉
  • 好吧……我向他展示了基本原理。您可以(我不太在意)将所有内容保存到一个变量中,然后调用 jquery 设置为 HTML。
【解决方案2】:

你不知道,我已经完成了你的工作。请按照我下面的代码并更改您在应用程序中需要的内容。但是您应该包含由您的服务器托管的文件以获得更快的结果::

完整代码

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript">
    var data = [
  {
    "UserID": 1,
    "UserName": "rooter",
    "Password": "12345",
    "Country": "UK",
    "Email": "sac@gmail.com"
  },
  {
    "UserID": 2,
    "UserName": "binu",
    "Password": "123",
    "Country": "uk",
    "Email": "Binu@gmail.com"
  },
  {
    "UserID": 3,
    "UserName": "cal",
    "Password": "123",
    "Country": "uk",
    "Email": "cal@gmail.com"
  },
  {
    "UserID": 4,
    "UserName": "nera",
    "Password": "1234",
    "Country": "uk",
    "Email": "nera@gmail.com"
  }
];
$(document).ready(function () {
    var html = '<table class="table table-striped">';
    html += '<tr>';
    var flag = 0;
    $.each(data[0], function(index, value){
        html += '<th>'+index+'</th>';
    });
    html += '</tr>';
     $.each(data, function(index, value){
         html += '<tr>';
        $.each(value, function(index2, value2){
            html += '<td>'+value2+'</td>';
        });
        html += '<tr>';
     });
     html += '</table>';
     $('body').html(html);
});
</script>

它会如下图所示:

【讨论】:

  • 您已经对表格的列进行了硬编码。问题是根据提供的 JSON 对象构建一个表。对该对象的任何更改都会破坏您的代码。
  • 此外,您忘记提及您使用的依赖项。 table-striped 来自bootstrap,如果我没记错的话..
  • 是的,我正在发送,请稍候。
  • @Rooter 请关注我的更新答案
  • @Lix Ahh,对不起,我赶时间。现在我认为需要否定。
【解决方案3】:
var data = jsonObject;
var table = document.createElement("table");
var tr = document.createElement("tr");
var thUserID = document.createElement("th");
var thUserName = document.createElement("th");
var thPassword = document.createElement("th");
var thCountry = document.createElement("th");
var thEmail = document.createElement("th");
thUserID.innerText = "userID";
thUserName.innerText = "userName";
thPassword.innerText = "password";
thCountry.innerText = "country";
thEmail.innerText = "email";
tr.appendChild(thUserID);
tr.appendChild(thUserName);
tr.appendChild(thPassword);
tr.appendChild(thCountry);
tr.appendChild(thEmail);    
for(var i=0; i<data.length; i++) {
    var userID = data[i].UserID;
    var userName = data[i].UserName;
    var password = data[i].Password;
    var country = data[i].Country;
    var email = data[i].Email;
    var tr = document.createElement("tr");
    var tdUserID = document.createElement("td");
    tdUserID.innerText = userID;
    var tdUserName = document.createElement("td");
    tdUserName.innerText = userName;
    var tdPassword = document.createElement("td");
    tdPassword.innerText = password;
    var tdCountry = document.createElement("td");
    tdCountry.innerText = country;
    var tdEmail = document.createElement("td");
    tdEmail.innerText = email;
    tr.appendChild(tdUserID);
    tr.appendChild(tdUserName);
    tr.appendChild(tdPassword);
    tr.appendChild(tdCountry);
    tr.appendChild(tdEmail);
    table.appendChild(tr);
}
document.body.appendChild(table);

【讨论】:

  • 我看到你只是想帮忙——但这个解决方案的代码太硬了——当 JSON 数据发生变化(添加一个额外的密钥)时,这个代码就会中断。
  • 我使用 StackOverflow 的次数越多,我就越不喜欢它。你问了一个具体的问题,你得到了一个具体的答案。如果您愿意,可以使用 for(i in data)。
  • 哇,我因为准确地回答这个问题而投了反对票,但它没有预料到 OP 可能想要一些不同的东西?
【解决方案4】:

这就是我会做的

var object = [
  {
    "UserID": 1,
    "UserName": "rooter",
    "Password": "12345",
    "Country": "UK",
    "Email": "sac@gmail.com"
  },
  {
    "UserID": 2,
    "UserName": "binu",
    "Password": "123",
    "Country": "uk",
    "Email": "Binu@gmail.com"
  },
  {
    "UserID": 3,
    "UserName": "cal",
    "Password": "123",
    "Country": "uk",
    "Email": "cal@gmail.com"
  },
  {
    "UserID": 4,
    "UserName": "nera",
    "Password": "1234",
    "Country": "uk",
    "Email": "nera@gmail.com"
  }
];


function createTable(){
	$('#content').append('<table id="jsonTable"><thead><tr></tr></thead><tbody></tbody></table>');
	
  $.each(Object.keys(object[0]), function(index, key){
    $('#jsonTable thead tr').append('<th>' + key + '</th>');
  });	
  $.each(object, function(index, jsonObject){     
    if(Object.keys(jsonObject).length > 0){
      var tableRow = '<tr>';
      $.each(Object.keys(jsonObject), function(i, key){
         tableRow += '<td>' + jsonObject[key] + '</td>';
      });
      tableRow += "</tr>";
      $('#jsonTable tbody').append(tableRow);
    }
	});
}

$(document).ready(function(){
  createTable();
});
tr:nth-child(even) td {background: #f2f2f2}

table{
	border-collapse: collapse;
}
table td, table th{
	border: 1px solid black;
  text-align: left;
}
table thead{
	background:#ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div id="content"></div>

【讨论】:

  • 您正在根据提供的 JSON 动态创建表头,但是在填充表时您仍在使用硬编码键 - 如果 JSON 发生变化,此代码将中断(添加额外的键)
  • @Lix 我刚刚修改了我的代码,所以如果你添加了一个新密钥,它就可以工作
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 2013-07-22
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2013-12-13
  • 2015-09-18
  • 1970-01-01
相关资源
最近更新 更多