84 votes

Convertir un tableau JSON en un tableau HTML en jQuery

Existe-t-il un moyen vraiment simple de prendre un tableau d'objets JSON et de le transformer en un tableau HTML, à l'exception de quelques champs ? Ou vais-je devoir le faire manuellement ?

87voto

avatastic Points 539

L'utilisation de jQuery rendra cette tâche plus simple.

Le code suivant prend un tableau de tableaux et les convertit en rangées et en cellules.

$.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);
});

Vous pourriez ajouter une vérification pour les clés que vous voulez exclure en ajoutant quelque chose comme

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

au début de la fonction de rappel getJSON et en ajoutant :

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

autour de la ligne tbl_row +=.

Edit : J'assignais une variable nulle auparavant

Edit : Version basée sur Timmmm 's sans injection contribution.

$.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
});

0 votes

J'ai du mal à contrôler l'ordre des colonnes.

0 votes

Je viens de voir ça. Comment puis-je l'écrire pour que le <tr> a alterné entre avoir une classe paire ou impaire ?

0 votes

L'ordre des colonnes dépendra de l'ordre dans lequel elles apparaissent dans les données sources. J'ai ajouté un simple alternateur pair/impair à l'OP.

39voto

Daniel Moura Points 4298

Je ne suis pas sûr que ce soit ce que vous voulez mais il y a jqGrid . Il peut recevoir JSON et faire une grille.

0 votes

Un autre vote pour jqGrid - vraiment facile à mettre en œuvre, avec une excellente documentation et des exemples, et qui réduit une grande partie du travail pour vous.

0 votes

JqGrid est très prometteur !

5 votes

Notez que jqGrid est un produit commercial dont le coût de la licence n'est pas négligeable.

15voto

Dr.sai Points 245

Créez un tableau HTML à partir d'un tableau d'objets JSON en étendant $ comme indiqué ci-dessous.

$.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));
};

et l'utiliser comme suit :

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

où TableCont est un div quelconque

9voto

Timmmm Points 9909

Purement HTML, pas vulnérable comme les autres 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);
}

Exemple d'utilisation :

$.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);
});

7voto

John Slegers Points 509

Convertir un tableau JavaScript 2D en un tableau HTML

Pour transformer un tableau JavaScript en 2D en un tableau HTML, vous n'avez besoin que d'un peu de code :

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>

Chargement d'un fichier JSON

Si vous souhaitez charger votre tableau 2D à partir d'un fichier JSON, vous aurez également besoin d'un peu de code Ajax :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X