获取从对象的JSON数组键/值不知道

问题描述:

我试图建立与诸如从JSON结构数组数据的HTML表的键名:获取从对象的JSON数组键/值不知道

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

我知道我可以使用:

​​

但是我怎么能得到相同的结果,如果我不知道什么名称(firstName,lastName)被称为?我如何迭代JSON结构数组中每个对象的键/值?

在每个阵列中,元件的每个对象中的数量将是相同的

+3

[Object.keys()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/键)会给你一个对象自己的属性的数组。然后你可以迭代它。 – ste2425

+0

[获取键/值javascript对象的键的最佳方式]的可能重复(http://*.com/questions/6268679/best-way-to-get-the-key-of-a-key- value-javascript-object) – Iceman

使用Object.keys得到objectkeys

Object.keys()方法返回表示所有枚举的属性的给定对象的字符串阵列

使用arrayindex决定表的header

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

完全是我以后的事!谢谢! –

使用for...in回路。

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

这里是如何的代码应该看起来像(见JSFiddle):

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

谢谢,我试过了,但它只给了我一个索引号列表 –

+0

@PeterJQuinn。你在JSFiddle上试过了吗?它按预期工作,您得到的索引可以用作对象的属性名称。 – 2016-08-16 09:03:03

+0

Apologies @ SoftwareEngineer171,这显示了我的结果,但它创建行与每隔一行的键。我知道我没有具体说明不这样做,反正这很容易消除。非常感谢 –

你可以简单地这样做

 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>"; 

您可以进一步拉低到一个循环如果你想。

你可以试试这个.. JSFiddle

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