2012-03-29 17 views
9

Làm thế nào để làm cho bảng sau đây thành một chuỗi JSON trong jquery/javascript?Làm thế nào để chuyển đổi bảng sau sang JSON bằng javascript?

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

tôi muốn làm cho nó như vậy mà tôi có thể nhận được một chuỗi JSON trong một "myjson" biến mà có thể được sử dụng trong một yêu cầu POST hoặc GET yêu cầu:

{ 
    "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" 
    } 
    ] 
} 

cách tốt nhất là gì để hoàn thành việc này? (Lưu ý: Có thể có một số hàng khác nhau, tôi chỉ muốn trích xuất văn bản trong khi bỏ qua các thẻ khác bên trong bảng)

+0

bạn có thể cho chúng tôi một số html để dễ dàng viết jquery để phù hợp với nó không! – Michael

+0

jQuery kết nối với cơ sở dữ liệu của bạn như thế nào? (Điều này sẽ không thể, nhưng sẽ không thể.) – TRiG

+0

anh ta nói rằng POST và GET yêu cầu mà sẽ làm cho điều này một kết nối ajax rõ ràng (php hoặc aspx) – Michael

Trả lời

20

Cập nhật: Có một slightly improved fork of the solution (below) on jsFiddle.

Bạn chỉ cần đọc DOM bảng của mình để đọc nó ... đây là thậm chí không gần tối ưu hóa nhưng sẽ cung cấp cho bạn kết quả mong muốn. (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));​ 

Và đầu ra ...

{"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"}]} 
+0

Wow điều này là tốt. Tôi chỉ đọc nó. Tôi rất ấn tượng. :) – Michael

+0

Chỉ có "vấn đề" ở đây là bạn nhận được giá trị tiêu đề trên mỗi hàng. Bạn có thể đã lưu trữ nó. – alextercete

+0

Vâng, đó là một trong những lý do tại sao tôi đã đề cập rằng nó không được tối ưu hóa. Tôi sẽ sửa đổi nó một chút cho điều đó. – scottheckel

0

Ở đây bạn đi http://jsfiddle.net/Ka89Q/4/

var head = [], 
    i = 0, 
    tableObj = {myrows: []}; 
$.each($("#my_table thead th"), function() { 
    head[i++] = $(this).text(); 
}); 

$.each($("#my_table tbody tr"), function() { 
    var $row = $(this), 
     rowObj = {}; 

    i = 0; 
    $.each($("td", $row), function() { 
     var $col = $(this); 
     rowObj[head[i]] = $col.text(); 
     i++; 
    }) 

    tableObj.myrows.push(rowObj); 
}); 

alert(JSON.stringify(tableObj)); 
2

Hãy thử điều này.

var myRows = { myRows: [] }; 

var $th = $('table th'); 
$('table tbody tr').each(function(i, tr){ 
    var obj = {}, $tds = $(tr).find('td'); 
    $th.each(function(index, th){ 
     obj[$(th).text()] = $tds.eq(index).text(); 
    }); 
    myRows.myRows.push(obj); 
}); 
alert(JSON.stringify(myRows)); 

bản demo làm việc - http://jsfiddle.net/u7nKF/1/

1

phiên bản của tôi về nó:

var $table = $("table"), 
    rows = [], 
    header = []; 

$table.find("thead th").each(function() { 
    header.push($(this).html()); 
}); 

$table.find("tbody tr").each(function() { 
    var row = {}; 

    $(this).find("td").each(function (i) { 
     var key = header[i], 
      value = $(this).html(); 

     row[key] = value; 
    }); 

    rows.push(row); 
}); 

Xem Fiddle.

+0

Cảm ơn !!! Nó đã giúp tôi rất nhiều nguyên nhân bạn chia tay từ bảng $, mà trong trường hợp của tôi là cần thiết khi tôi phân tích cú pháp một chuỗi html được tạo ra bởi wordpress (không hỏi tôi tại sao ¬¬) – Cyberdelphos

1

Tôi cần điều tương tự ngoại trừ khả năng bỏ qua các cột, ghi đè các giá trị và không bị nhầm lẫn bởi các bảng lồng nhau. Tôi đã kết thúc viết một plugin jQuery bảng-to-json:

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

Tất cả bạn phải làm là chọn bảng của bạn sử dụng jQuery và gọi các plugin:

var table = $('#example-table').tableToJSON(); 

Đây là một bản demo của nó hoạt động:

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

Các vấn đề liên quan