2016-08-16 6 views
0

Ich versuche, eine HTML-Tabelle mit Daten aus einer JSON strukturierten Array zu bauen, wie:Erhalten Sie Schlüssel/Wert von JSON Array von Objekten, ohne den Schlüssel Namen zu kennen

var myjson = [ 
{"firstName":"John", "lastName":"Doe"}, 
{"firstName":"Anna", "lastName":"Smith"}, 
{"firstName":"Peter","lastName": "Jones"} 
]; 

Ich weiß, dass ich verwenden kann:

aber wie kann ich das gleiche Ergebnis erhalten, wenn ich nicht weiß, wie die Spaltennamen (firstName, lastName) heißen? Wie kann ich die Schlüssel/Werte jedes Objekts im strukturierten JSON-Array durchlaufen?

In jeder Anordnung wird die Anzahl der Elemente in jedem Objekt die gleiche seine

+3

[Object.keys()] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/ Schlüssel) Gibt Ihnen ein Array der Objekte eigene Eigenschaften. Sie könnten das dann iterieren. – ste2425

+0

Mögliches Duplikat von [bester Weg, um den Schlüssel eines Schlüssel/Wert-Javascript-Objekts zu erhalten] (http://stackoverflow.com/questions/6268679/best-way-to-get-the-key-of-a-key-) value-javascript-object) – Iceman

Antwort

1

Verwenden Object.keys die keys des object zu bekommen.

Object.keys() Methode liefert eine Array von Strings, die alle enumerable Eigenschaften des gegebenen Objekts darstellen.

Verwenden index von arrayheader der Tabelle kann

var myjson = [{ 
 
    "firstName": "John", 
 
    "lastName": "Doe" 
 
}, { 
 
    "firstName": "Anna", 
 
    "lastName": "Smith" 
 
}, { 
 
    "firstName": "Peter", 
 
    "lastName": "Jones" 
 
}]; 
 
var tbl = "<table>"; 
 
$.each(myjson, function(x, y) { 
 
    var keys = Object.keys(y); 
 
    if (!x) { 
 
    tbl += "<tr>"; 
 
    keys.forEach(function(key) { 
 
     tbl += "<th>" + key + "</th>"; 
 
    }); 
 
    tbl += "</tr>"; 
 
    } 
 
    tbl += "<tr>"; 
 
    keys.forEach(function(key) { 
 
    tbl += "<td>" + y[key] + "</td>"; 
 
    }); 
 
    tbl += "</tr>"; 
 
}); 
 

 
tbl += "</table>"; 
 
$('body').append(tbl);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

Genau das, was ich suchte! Vielen Dank! –

2

Verwendung for...in Schleife.

for(let key in myjson[0]) console.log(key + ' == ' + myjson[0][key]); 

Hier ist, wie Sie Code sollte wie folgt aussieht (siehe JSFiddle auch):

var myjson = [{ 
    "firstName": "John", 
    "lastName": "Doe" 
}, { 
    "firstName": "Anna", 
    "lastName": "Smith" 
}, { 
    "firstName": "Peter", 
    "lastName": "Jones" 
}]; 

var keys = []; 
for(let key in myjson[0]) keys.push(key); 

var tbl = "<table>" 

$.each(myjson, function() { 
    tbl += "<tr>"; 
    for(let index in keys) tbl += '<td>' + keys[index] + '</td>'; 
    tbl += "</tr>"; 
    tbl += "<tr>"; 
    for(let index in keys) tbl += '<td>' + arguments[1][keys[index]] + '</td>'; 
    tbl += "</tr>"; 
}); 

tbl += "</table>"; 

document.body.innerHTML = tbl; 
+0

Danke, ich habe es versucht, aber es gab mir nur eine Liste der Indexnummern –

+0

@PeterJQuinn. Hast du es auf JSFiddle versucht? Es funktioniert wie erwartet, die Indizes, die Sie erhalten, können Sie als Eigenschaftsnamen Ihres Objekts verwenden. –

+0

Apologies @ SoftwareEngineer171, dies zeigt mir Ergebnisse, aber es erstellt Zeilen mit den Schlüsseln jeder zweiten Zeile. Ich weiß, dass ich nicht angegeben habe, dies nicht zu tun, und es wäre einfach genug, dies sowieso zu eliminieren. Vielen Dank –

0

Sie einfach zu entscheiden, tun dies

 var tbl = "<table>" 
     $.each(myjson, function(x, y) { 
      keys = Object.keys(y); 
      tbl += "<tr>"; 
      $.each(keys, function(i,key){ 
       tbl += "<td>" + key + "</td>"; 
      }) 
      tbl += "</tr><tr>"; 
      $.each(keys, function(i,key){ 
       tbl += "<td>" + y[key] + "</td>"; 
      }) 
      tbl += "</tr>"; 
      }); 
     tbl += "</table>"; 

können Sie weiter zu einer Schleife bringen wenn du willst.

0

Sie können dies versuchen .. JSFiddle

tbl += "<tr>"; 
         for(var i=0;i<Object.keys(myjson[0]).length; i++) 
      {       
        tbl += "<td>"+Object.keys(myjson[0])[i]+"</td>";        
      } 
      tbl += "</tr>"; 
Verwandte Themen