2010-02-10 52 views
15

Bất kỳ ai cũng biết cách chuyển đổi bảng giá trị HTML thành đối tượng JSON đẹp để được thao tác với jQuery?Chuyển đổi dữ liệu bảng HTML thành đối tượng JSON trong jQuery

+1

Bạn có ý nghĩa gì bởi "bảng"? Bảng cơ sở dữ liệu? Bảng HTML? – Sampson

+0

có thể trùng lặp của [Iterate qua bảng html bằng cách sử dụng jQuery, chuyển đổi dữ liệu trong bảng thành JSON] (http://stackoverflow.com/questions/1872485/iterate-through-html-table-using-jquery-converting-the- data-in-the-table-into-js) –

Trả lời

25

Bảng HTML? Giống như, tất cả các nội dung <td> trong một mảng 2-d?

var tbl = $('table#whatever tr').map(function() { 
    return $(this).find('td').map(function() { 
    return $(this).html(); 
    }).get(); 
}).get(); 

Sau đó chỉ cần sử dụng $ .json (hoặc bất kỳ thư viện bạn muốn) để biến chúng thành một chuỗi JSON.

chỉnh sửa — lại ghi vào sử dụng có nguồn gốc (shim here) .map() từ nguyên mẫu mảng:

var tbl = $('table#whatever tr').get().map(function(row) { 
    return $(row).find('td').get().map(function(cell) { 
    return $(cell).html(); 
    }); 
}); 

Các jQuery .map() hàm có "tính năng" của phẳng mảng trở lại vào mảng kết quả. Tức là, nếu hàm gọi lại trả về một giá trị mà chính nó là một mảng, thì thay vì mảng trả về đó trở thành giá trị của một ô của kết quả .map(), mỗi phần tử của nó được thêm vào kết quả.

có thể hoạt động để sử dụng phiên bản jQuery gốc và chỉ bọc thêm một mảng quanh giá trị trả về.

+0

Trò đùa ở đây có thể là điều này không thực sự hiệu quả. Phương thức jQuery '.map()' có tính năng (khá nghi ngờ, nếu bạn hỏi tôi) về làm phẳng mảng được trả về. Cách tiếp cận cơ bản này sẽ làm việc tuy nhiên với bản '.map()' thuần túy mà các môi trường JavaScript mới hơn cung cấp thông qua nguyên mẫu Array. – Pointy

+0

Nó rất hữu ích !! BTW @Pointy, nếu như TD có một lớp duy nhất, ví dụ như bah bah bah ..., tôi có thể chuyển đổi nó thành json, vì vậy tên lớp đã trở thành tên thuộc tính như vậy ==> "message": "bah bah bah ...", cảm ơn rất nhiều –

+0

@VirtualJasper có bạn chắc chắn có thể làm điều đó, nhưng bạn muốn cần phải xây dựng một đối tượng cho mỗi ô. Tôi sẽ hỏi một câu hỏi mới. – Pointy

14

Tôi cần điều tương tự ngoại trừ khả năng bỏ qua 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/Crw2C/173/

+0

Điều xấu là, nếu có một thẻ html trong ô, nó sẽ được thay thế bằng chuỗi rỗng. –

+0

@JerryLiang có một tùy chọn 'allowHTML' để giữ các thẻ HTML – lightswitch05

+0

@ lightswitch05 trong jsfiddle của bạn nếu bảng chứa danh sách thả xuống so với cách chỉ nhận giá trị được chọn trong json ... (Trong trường hợp của tôi senario giống như bạn nói cũng làm việc tốt fiddle nhưng trong bảng của tôi trên cột nhiều hơn cho Nhà nước (thả xuống) hơn trong json tất cả dữ liệu cho dropdown.plz giúp tôi ... Cảm ơn) –

16

Bạn có phải là trường hợp sau đây không?

Given:

A1 B1 C1 ... 
A2 B2 C2 ... 
... 

cần thiết:

{"1": ["A1", "B1", "C1", ...], 
"2": ["A2", "B2", "C2", ...], ...} 

Vì vậy, sử dụng chức năng sau đó tạo ra một giá trị JSON-String chức năng mà không cần dấu "":

function html2json() { 
    var json = '{'; 
    var otArr = []; 
    var tbl2 = $('#dest_table tr').each(function(i) {   
     x = $(this).children(); 
     var itArr = []; 
     x.each(function() { 
     itArr.push('"' + $(this).text() + '"'); 
     }); 
     otArr.push('"' + i + '": [' + itArr.join(',') + ']'); 
    }) 
    json += otArr.join(",") + '}' 

    return json; 
} 
+0

câu hỏi là 3 tuổi và có một câu trả lời được chấp nhận, lol tại sao bạn trả lời nó? – Jimmy

+13

Vâng, nhiều người sẽ gặp vấn đề tương tự như OP. @ Câu trả lời của John có thể cung cấp giải pháp bổ sung cho họ – didxga

+0

Chụp đẹp, thật tuyệt vời. – Tugrul

-4
{ "0":"[ 
    ['Product','Available','Issue','With Store'], 
    ['GV Rs. 100/-','4461','0','226'], 
    ['PV RED','8','0','0'] 
    ]" 
} 
+0

chức năng cho json này là gì – user6379621

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