以JSON格式将jquery数据表数据发布到服务器

以JSON格式将jquery数据表数据发布到服务器,jquery,json,datatables,Jquery,Json,Datatables,我知道这个问题在SO和datatables网站上被问了很多次,但我无法使用提供的解决方案使其正常工作 我正在客户端构建datatable,现在希望以json格式将客户端数据发布到我的WEPAPI控制器 在添加/删除行时,客户端工作正常。 但当我尝试使用以下方法创建JSON时: var table = $('#detailTable').DataTable(); var details = JSON.stringify(table.rows().data().toArray()); 我得

我知道这个问题在SO和datatables网站上被问了很多次,但我无法使用提供的解决方案使其正常工作

我正在客户端构建datatable,现在希望以json格式将客户端数据发布到我的WEPAPI控制器

在添加/删除行时,客户端工作正常。 但当我尝试使用以下方法创建JSON时:

    var table = $('#detailTable').DataTable();
var details = JSON.stringify(table.rows().data().toArray());
我得到以下结果:

[["11046","ABC","bis","123","123",15129]]
因此,基本上我的JSON对象中缺少列名,因此web api无法将其提取并转换为:

List<ReceiptEntryViewModel> ReceiptDetails

如果您只想收集列名并将其用作JSON中的属性名,则可以通过以下方式构建列名数组:

var fieldNames =  [], json = []
table.settings().columns()[0].forEach(function(index) {
  fieldNames.push($(table.column(index).header()).text())  
})
我正在使用
text()
过滤掉任何HTML。然后按照上面的方法进行操作,但要迭代每一行,并使用收集的
字段名
,为每一行构造一个对象文本(JSON项):

table.rows().data().toArray().forEach(function(row) {
  var item = {}
  row.forEach(function(content, index) {
     item[fieldNames[index]] = content
  })
  json.push(item)
})  
现在您有了一个有效的JSON,可以
字符串化
并发送到服务器

小样本演示->

请注意,这只是一个示例。如果数据集较大,则应避免使用
forEach
,而使用
for
-循环。此外,不需要盲目地重建头名称数组,因为开发人员既知道列名,也知道希望属性的名称


使用最终的解决方案进行更新。如果dataTable本身已准备好使用JSON,则可以避免构建JSON的扭曲。定义
部分:

var table = $('#example').DataTable({
  columns : [
    {  data : 'myField' }
  ]
})
并将新行作为JSON/文本插入:

table.row.add({myField:'some value'}).draw()
现在

JSON.stringify(table.rows().data().toArray())
将返回可传递给serverscript的有效JSON字符串


演示->

您好,大卫,谢谢您的回答,它看起来可以工作,在我的情况下,我将处理最多100行,因此不认为会对性能产生影响。然而,我认为有一个内置的datatables函数(它已经处理了循环)可以生成一个格式正确的JSON,而我的WEPAPI可以accept@JustLearning不幸的是,没有神奇的API函数将字符串数组转换为JSON。但是,如果为dataTable指定一个
columns
部分,并自己将数据作为JSON插入,则
table.rows().data()
的输出将是有效的JSON。参见示例->所以你可以说,如果你第一次做对了,你不需要上面的曲解:)太好了,实际上你评论中的解决方案正是我想要的。请补充答案!感谢you@JustLearning,已更新为一个新示例。谢谢你接受答案。
var table = $('#example').DataTable({
  columns : [
    {  data : 'myField' }
  ]
})