在 jQuery 中将 JSON 数组转换为 HTML 表

IT技术 javascript jquery json ajax html-table
2021-01-29 17:23:28

有没有一种非常简单的方法可以获取一组 JSON 对象并将其转换为 HTML 表,不包括一些字段?还是我必须手动执行此操作?

6个回答

使用 jQuery 将使这更简单。

以下代码将获取一个数组数组并将它们存储转换为行和单元格。

$.getJSON(url , function(data) {
    var tbl_body = "";
    var odd_even = false;
    $.each(data, function() {
        var tbl_row = "";
        $.each(this, function(k , v) {
            tbl_row += "<td>"+v+"</td>";
        });
        tbl_body += "<tr class=\""+( odd_even ? "odd" : "even")+"\">"+tbl_row+"</tr>";
        odd_even = !odd_even;               
    });
    $("#target_table_id tbody").html(tbl_body);
});

您可以通过添加类似的内容来检查要排除的键

var expected_keys = { key_1 : true, key_2 : true, key_3 : false, key_4 : true };

在 getJSON 回调函数的开头并添加:

if ( ( k in expected_keys ) && expected_keys[k] ) {
...
}

围绕 tbl_row += 线。

编辑:之前分配了一个空变量

编辑:基于Timmmm的无注入贡献的版本。

$.getJSON(url , function(data) {
    var tbl_body = document.createElement("tbody");
    var odd_even = false;
    $.each(data, function() {
        var tbl_row = tbl_body.insertRow();
        tbl_row.className = odd_even ? "odd" : "even";
        $.each(this, function(k , v) {
            var cell = tbl_row.insertCell();
            cell.appendChild(document.createTextNode(v.toString()));
        });        
        odd_even = !odd_even;               
    });
    $("#target_table_id").append(tbl_body);   //DOM table doesn't have .appendChild
});
你应该使用$("#target_table_id").append(tbl_body); 而不是 $("#target_table_id").appendChild(tbl_body); 因为 jQuery 对象只公开了一个 append 函数。
2021-03-12 17:23:28
我很难控制列的顺序
2021-03-21 17:23:28
刚看到这个。我将如何编写它以便在<tr>偶数类或奇数类之间交替?
2021-03-28 17:23:28
列的顺序将取决于它们在源数据中出现的顺序。我在 OP 中添加了一个简单的奇数/偶数交流发电机。
2021-03-30 17:23:28
请注意,这很容易受到脚本注入的影响。即不要将它与用户生成的内容一起使用。
2021-04-03 17:23:28

我不确定这是否是您想要的,但有jqGrid它可以接收 JSON 并制作网格。

jqGrid 看起来很有前途!
2021-03-11 17:23:28
请注意,jqGrid 是一种商业产品,许可成本很高。
2021-03-11 17:23:28
jqGrid 的另一个投票 - 非常容易实现,有很好的文档和示例,并为您减少了很多工作。
2021-03-27 17:23:28

通过扩展 $ 从对象的 JSON 数组创建 HTML 表,如下所示

$.makeTable = function (mydata) {
    var table = $('<table border=1>');
    var tblHeader = "<tr>";
    for (var k in mydata[0]) tblHeader += "<th>" + k + "</th>";
    tblHeader += "</tr>";
    $(tblHeader).appendTo(table);
    $.each(mydata, function (index, value) {
        var TableRow = "<tr>";
        $.each(value, function (key, val) {
            TableRow += "<td>" + val + "</td>";
        });
        TableRow += "</tr>";
        $(table).append(TableRow);
    });
    return ($(table));
};

并使用如下:

var mydata = eval(jdata);
var table = $.makeTable(mydata);
$(table).appendTo("#TableCont");

其中 TableCont 是一些 div

纯 HTML 方式,不像其他人 AFAIK 那样容易受到攻击:

// Function to create a table as a child of el.
// data must be an array of arrays (outer array is rows).
function tableCreate(el, data)
{
    var tbl  = document.createElement("table");
    tbl.style.width  = "70%";

    for (var i = 0; i < data.length; ++i)
    {
        var tr = tbl.insertRow();
        for(var j = 0; j < data[i].length; ++j)
        {
            var td = tr.insertCell();
            td.appendChild(document.createTextNode(data[i][j].toString()));
        }
    }
    el.appendChild(tbl);
}

用法示例:

$.post("/whatever", { somedata: "test" }, null, "json")
.done(function(data) {
    rows = [];
    for (var i = 0; i < data.Results.length; ++i)
    {
        cells = [];
        cells.push(data.Results[i].A);
        cells.push(data.Results[i].B);
        rows.push(cells);
    }
    tableCreate($("#results")[0], rows);
});

将 2D JavaScript 数组转换为 HTML 表格

要将 2D JavaScript 数组转换为 HTML 表格,您确实需要一些代码:

function arrayToTable(tableData) {
    var table = $('<table></table>');
    $(tableData).each(function (i, rowData) {
        var row = $('<tr></tr>');
        $(rowData).each(function (j, cellData) {
            row.append($('<td>'+cellData+'</td>'));
        });
        table.append(row);
    });
    return table;
}

$('body').append(arrayToTable([
    ["John","Slegers",34],
    ["Tom","Stevens",25],
    ["An","Davies",28],
    ["Miet","Hansen",42],
    ["Eli","Morris",18]
]));
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>


加载 JSON 文件

如果要从 JSON 文件加载 2D 数组,还需要一些 Ajax 代码:

$.ajax({
    type: "GET",
    url: "data.json",
    dataType: 'json',
    success: function (data) {
        $('body').append(arrayToTable(data));
    }
});