2011-06-07 220 views
15

我需要將表格行轉換爲JSON。將HTML表格轉換爲JSON

任何想法?我在這裏有這個代碼,但它不起作用。

function tableToJSON(tableID) { 
    return $(tableID + " tr").map(function (row) { 
     return row.descendants().pluck("innerHTML"); 
    }).toJSON(); 
} 
+1

我會尋找一種方法來做到這一點,但爲什麼? HTML表格是顯示數據的一種方式,而不是存儲它。 – bigblind 2011-06-07 21:31:28

回答

16
function tableToJson(table) { 
    var data = []; 

    // first row needs to be headers 
    var headers = []; 
    for (var i=0; i<table.rows[0].cells.length; i++) { 
     headers[i] = table.rows[0].cells[i].innerHTML.toLowerCase().replace(/ /gi,''); 
    } 

    // go through cells 
    for (var i=1; i<table.rows.length; i++) { 

     var tableRow = table.rows[i]; 
     var rowData = {}; 

     for (var j=0; j<tableRow.cells.length; j++) { 

      rowData[ headers[j] ] = tableRow.cells[j].innerHTML; 

     } 

     data.push(rowData); 
    }  

    return data; 
} 

John Dyer's Blog

+28

看起來像這樣:http://johndyer.name/html-table-to-json/ – 2012-07-10 21:15:15

+10

@Awena作者應該被記入他們的工作。 – mikemaccana 2014-10-06 18:02:15

+1

似乎被使用thead,tbody標籤的表破壞。 – backdesk 2014-12-04 11:14:54

3

嘗試$("#"+tableID + " tr")代替。

3

您應該有所幫助:

<table id="answered"> 
<tbody> 
    <tr> 
     <td data-id="user.email">[email protected]</td> 
     <td data-id="meme.yodawg">Yo Dog! I Heard you liked answers, so I answered your question, with a method wrapped in a jQuery plugin!</td> 
    </tr> 
</tbody> 
</table> 

的jQuery:http://encosia.com/use-jquery-to-extract-data-from-html-lists-and-tables/

+0

瀏覽到此鏈接thorws this warning。 [![Screen Shot 2017-03-28 at 7.57.30 PM.jpg](https://s13.postimg.org/6km89ehpj/Screen_Shot_2017-03-28_at_7.57.30_PM.jpg)](https:// postimg .org/image/x5or4yk2r /) – lacostenycoder 2017-03-28 23:59:46

2

HTML兩者

(function($) { 

    $.extend($.fn, { 

    tableRowsToJSONWithFilter : function (filter) { 
     var tableSelector = this, item, attr, data, _JSON = []; 
     if (typeof(tableSelector) !== 'object') { 
     return new Error('Invalid tableSelect!'); 
     }; 
     $(tableSelector, 'tr').each(function(index, tr) { 
     item = {}; 
     $('td', $(this)).each(function(index, td) { 
      attr = $(td).attr('data-id'); 
      data = $(td).text(); 
      if (attr !== undefined && data !== '' && filter && new RegExp(filter, 'i').test(attr)) { 
      item[attr] = data; 
      }; 
     }); 
     _JSON.push(item); 
     }); 
     return _JSON; 
    } 

    }) 

})(jQuery); 

用法:

$('#answered').tableRowsToJSONWithFilter('yodawg'); 
+0

jsfiddle:http://jsfiddle.net/edwardhotchkiss/DzDXk/ – 2013-01-11 06:18:41

+1

有用,幽默。太好了! – 2013-02-04 16:31:04

3

我並不滿意上述所有的解決方案,並最終寫我自己的jQuery插件來實現這一點。它與解決方案非常相似,但接受若干選項來自定義結果,例如忽略隱藏行,覆蓋列名和覆蓋單元格值。

可以在此處找到該插件以及一些示例,如果這更多是您的尋找:我https://github.com/lightswitch05/table-to-json

3

這一個工作:(我只有2條線在我的表,th和td)

function htmlToJson(table) { 
    var obj = {}, 
     itemsLength = $(table.find('tbody tr')[0]).find('th').length; 
    for (i=0;i<itemsLength;i++) { 
     key = $(table.find('tbody tr')[0]).find('th').eq(i).text(); 
     value = $(table.find('tbody tr')[1]).find('td').eq(i).text(); 
     obj[key] = value; 
    } 
    return JSON.stringify(obj) 
} 
0

HTML表THEAD和TBODY:

function htmlTableToJson(table, edit = 0, del = 0) { 
     // If exists the cols: "edit" and "del" to remove from JSON just pass values = 1 to edit and del params 
     var minus = edit + del; 
     var data = []; 
     var colsLength = $(table.find('thead tr')[0]).find('th').length - minus; 
     var rowsLength = $(table.find('tbody tr')).length; 

     // first row needs to be headers 
     var headers = []; 
     for (var i=0; i<colsLength; i++) { 
      headers[i] = $(table.find('thead tr')[0]).find('th').eq(i).text(); 
     } 

     // go through cells 
     for (var i=0; i<rowsLength; i++) { 
      var tableRow = $(table.find('tbody tr')[i]); 
      var rowData = {}; 
      for (var j=0; j<colsLength; j++) { 
       rowData[ headers[j] ] = tableRow.find('td').eq(j).text(); 
      } 
      data.push(rowData); 
     }  
     return data; 
    }