如何使用javascript将下表转换为JSON?

Rol*_*ndo 14 javascript jquery json

如何将下表变成jquery/javascript中的JSON字符串?

<table>
  <thead>
    <tr>
      <th>Column 1</th>
      <th>Column 2</th>
      <th>Column 3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>A1</td>
      <td>A2</td>
      <td>A3</td>
    </tr>
    <tr>
      <td>B1</td>
      <td>B2</td>
      <td>B3</td>
    </tr>
    <tr>
      <td>C1</td>
      <td>C2</td>
      <td>C3</td>
    </tr>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

我想这样做,我可以在变量"myjson"中获得一个可以在POST请求或GET请求中使用的JSON字符串:

{
  "myrows" : [
    {
      "Column 1" : "A1",
      "Column 2" : "A2",
      "Column 3" : "A3"
    },
    {
      "Column 1" : "B1",
      "Column 2" : "B2",
      "Column 3" : "B3"
    },
    {
      "Column 1" : "C1",
      "Column 2" : "C2",
      "Column 3" : "C3"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

完成此任务的最佳方法是什么?(注意:可能存在不同数量的行,我只想提取文本而忽略表中的其他标记)

sco*_*kel 25

更新:在jsFiddle上有一个稍微改进的解决方案(下面).

你只需要把你的桌子的DOM读出来......这甚至没有接近优化,但会给你想要的结果.(jsFiddle)

// Loop through grabbing everything
var myRows = [];
var $headers = $("th");
var $rows = $("tbody tr").each(function(index) {
  $cells = $(this).find("td");
  myRows[index] = {};
  $cells.each(function(cellIndex) {
    myRows[index][$($headers[cellIndex]).html()] = $(this).html();
  });    
});

// Let's put this in the object like you want and convert to JSON (Note: jQuery will also do this for you on the Ajax request)
var myObj = {};
myObj.myrows = myRows;
alert(JSON.stringify(myObj));?
Run Code Online (Sandbox Code Playgroud)

而输出......

{"myrows":[{"Column 1":"A1","Column 2":"A2","Column 3":"A3"},{"Column 1":"B1","Column 2":"B2","Column 3":"B3"},{"Column 1":"C1","Column 2":"C2","Column 3":"C3"}]}
Run Code Online (Sandbox Code Playgroud)


Bas*_*asj 10

这是一个没有 jQuery 的解决方案,受到这篇文章的启发:

function tableToJson(table) { 
    var data = [];
    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.push(tableRow.cells[j].innerHTML);
        } 
        data.push(rowData); 
    } 
    return data; 
}
Run Code Online (Sandbox Code Playgroud)


lig*_*h05 5

除了能够忽略列、覆盖值和不被嵌套表混淆之外,我需要同样的东西。我最终编写了一个 jQuery 插件 table-to-json:

https://github.com/lightswitch05/table-to-json

您所要做的就是使用 jQuery 选择您的表并调用插件:

var table = $('#example-table').tableToJSON();
Run Code Online (Sandbox Code Playgroud)

这是它的实际演示:

http://jsfiddle.net/nyg4z/27/