2016-06-21 101 views
0

我有一个JSON数据:嵌套的JavaScript对象HTML表格

[ 
    {"OrderId":{"0":"20160620041104"}}, 
    {"GroupId":{"0":"20160620041104"}}, 
    {"Response":{"0":"Error"}}, 
    {"AuthCode":{}}, 
    {"HostRefNum":{}}, 
    {"ProcReturnCode":{"0":"99"}}, 
    {"TransId":{"0":"16172QLEH07028517"}}, 
    {"ErrMsg":{"0":"Kredi karti numarasi gecerli formatta degil."}}, 
    {"Extra":{"SETTLEID":{},"TRXDATE":"20160620 16:11:04","ERRORCODE":"CORE-2012","NUMCODE":"992012"}} 
] 

它看起来像下面的浏览器: enter image description here

所以我想你明白我想要什么。我需要生成html这个数据表:

<tr> 
<td>OrderId</td> 
<td>20160620...</td> 
</tr> 
<tr> 
<td>GroupId</td> 
<td>2016..</td> 
</tr> 
<tr> 
<td colspan="2"><b>Extra</b></td>//just add a empty row. no big deal 
</tr> 
<tr> 
<td>ERRCODE</td> 
<td>CORE-2012</td> 
</tr> .. 

我创建这个递归函数来做到这一点,但它不起作用。

var printObjectKeys = function (currentObject) { 
     $.each(currentObject,function (index, value) { 
      if($.type(value) == 'object'){ 
       debugger 
       var keys = Object.keys(value); 
       if(keys.length > 0){ 
        $.each(value, function (index_,value_) { 
         debugger 
         if($.isNumeric(index_)){ 
          //print table row 
          $("#tblDetail").append('<tr><td>'+index_+'</td><td>'+value_+'</td></tr>') 
         } 
         else 
          printObjectKeys(value_) 
        }) 
       } 
      } 
     }); 
    } 
+1

你能改变回应的格式吗?由于每个属性都位于数组中的自己对象中,因此格式不适合在表中显示。这对于有效访问来说是一个巨大的痛苦。 –

回答

2

您可以使用循环从对象中获取数据。我只是在这里打印结果。您可以将其附加到您的表格中:

var json = [ 
    {"OrderId":{"0":"20160620041104"}}, 
    {"GroupId":{"0":"20160620041104"}}, 
    {"Response":{"0":"Error"}}, 
    {"AuthCode":{}}, 
    {"HostRefNum":{}}, 
    {"ProcReturnCode":{"0":"99"}}, 
    {"TransId":{"0":"16172QLEH07028517"}}, 
    {"ErrMsg":{"0":"Kredi karti numarasi gecerli formatta degil."}}, 
    {"Extra":{"SETTLEID":{},"TRXDATE":"20160620 16:11:04","ERRORCODE":"CORE-2012","NUMCODE":"992012"}} 
]; 

for(var i=0; i<json.length; i++) { 
    var currentObject = json[i]; 
    currentObjectKeys = Object.keys(currentObject); 
    for(var j=0; j<currentObjectKeys.length; j++) { 
     var headingToDisplay = currentObjectKeys[j]; 
     var textToDisplay = ""; 
     var value = currentObject[headingToDisplay ]; 
     if(Object.keys(value).length == 1) { 
      textToDisplay = value[Object.keys(value)[0]]; 
     } 
     else if(Object.keys(value).length > 1) { 
      //This is for last row 'Extra',left blank now 
      for(var k=0; k<Object.keys(value); k++) { 

      } 
     } 

     console.log("<tr><td>" + headingToDisplay + "</td><td>" + textToDisplay + "</td></tr>"); 

    } 
} 

我将Extra列留空。您可以使用最后一个for循环获取Extra列的数据。让我知道你是否需要进一步的帮助。

+0

好主意留下部分并不那么困难我也使用这个 –

+0

是的,它看起来很好,我可以完成但如果数据格式机会我指的是该对象('SETTLEID')内的另一个嵌套对象比我需要更新代码严格吗?是否这样做更有效率地独立于对象的深处? – TyForHelpDude

-2

我建议使用map() 和你的对象数组值是嵌套的对象,以便利用 值_ [“0”]VALUE_所以检查嵌套对象值的值需要太多。