解析 JSON 并绑定到动态创建的 HTML 表的行和列

Posted

技术标签:

【中文标题】解析 JSON 并绑定到动态创建的 HTML 表的行和列【英文标题】:Parse JSON and bind to dynamically created rows and columns of HTML table 【发布时间】:2018-12-28 23:11:06 【问题描述】:

在这里使用 angularjs:

我有一个 html 表,其列和可编辑行是动态创建的。用户可以将此详细信息保存在数据库中。

动态创建我将列名称保存为逗号分隔的名称。这些行也保存为每行的逗号分隔值。

例如db表如下:

Id col                      row       comment   createdby
1  col1, col2, col3, col4   1,2,3,4   test1     abc
2  col1, col2, col3, col4   5,6,7,8   test2     abc

在详细视图用户期间,我想重绘表格,从数据库中获取 col 和 row 值,如下所示

上表在 UI 上如下所示

col1 col2 col3 col4
 1    2    3    4
 5    6    7    8

表格代码如下:

function createTable()    
   return       
     columns: [],
     rows: []     
        
   

 var table = 
       columns: [],
       rows: []
    ;              
$scope.tables = [table];
$scope.tables.push(createTable());
$scope.targetTable = $scope.tables[0];

从我的 api 返回的 Json 是这样的:


  colName: "col1, col2, col3, col4
  rowValues: "1,2,3,4"


  colName: "col1, col2, col3, col4
  rowValues: "5,6,7,8"

//and so on we can have more rows

对于列我这样做。

var colArray = json.colName.split(',');
for (var i = 0; i < colArray.length; i++) 
$scope.targetTable.columns.push(       
    colName: colJson.col.split(',')[i],      
//where colName is the ng-model in the html for table header
);

上面的代码工作正常,我可以看到我的 HTML 表是用所有这些列创建的

我很难找到将我的行绑定到此表的解决方案,因为它们是动态创建的并且没有行数限制。

对于添加行,我们会这样做

  $scope.targetTable.rows.push();

所以在我的情况下,我如何循环遍历我的 Json 并将每个值推送到行。 例如,这样的事情会根据我的 json 创建前两行:

 $scope.targetTable.rows.push(
        "0":"1", "1":"2", "2":"3","3":"4"
);
 $scope.targetTable.rows.push(
        "0":"5", "1":"6", "2":"7","3":"8"
);

【问题讨论】:

【参考方案1】:

我不完全确定此解决方案是否会回答您的问题,如果没有,我会尝试根据需要进行更新。

对于单行,我相信这种方法会按预期工作:

var rowArray = json.rowValues.split(',');
for (var i = 0; i < rowArray.length; i++) 
    var rowObject = ;
    json.rowValues.split(',').forEach((elem, index) => 
        rowObject[index] = elem;
    )

    $scope.targetTable.rows.push(rowObject);

这将从json.rowValues 中取出一行,其格式类似于11,22,33,44,并将其转换为与您的行格式匹配的对象(0: "11", 1: "22", 2: "33", 3: "44")。然后将该对象推送到 $scope 中的表中。

【讨论】:

以上内容仅适用于一行。如果您在上面看到我的帖子,这里再次存在的问题是我有 json 数组。我需要解析那个 json 行数组,然后让你的解决方案适应它。我期望的是上述函数被调用两次,创建 2 行。一个用于 0: "1", 1: "2", 2: "3", 3: "4",第二个用于 0: "5", 1: "6", 2: "7", 3:“8” 啊,我没有意识到 JSON 是在数组中返回的,因为它不像数组那样格式化。我已经用应该适用的代码更新了我的答案。【参考方案2】:

你可以试试这样的。

// New data that you will push
newJson = ; 

// The data you pulled from server
oldJson =  
  colName: "col1, col2, col3, col4",
  rowValues: "1,2,3,4",
;


oldJson.rowValues.split(',').map((element, index) => 
    newJson[index] = element;
);
// New Json... Expected Output: 0: 1, 1: 2, 2: 3, 3: 4

$scope.targetTable.rows.push(newJson); 

【讨论】:

正如我在上一条评论中发布的那样。这适用于单行。我有 json 行数组。如何遍历 json 数组,然后使用您的上述逻辑 您需要将从您的 api 获取的 JSON 保存为一个数组。示例: "Rows": [ "colName": "col1, col2, col3, col4", "rowValues": "1,2,3,4" , "colName": "col1, col2, col3, col4", "rowValues": "5,6,7,8" ] 然后您应该能够使用前面提到的函数遍历 Rows 的每个元素。【参考方案3】:

我会推荐使用 jQuery。您可以组合表结构并附加到表体,例如,

"yourdata": colName: "col1, col2, col3, col4 rowValues: "1,2,3,4" colName: "col1, col2, col3, col4 rowValues: "5,6,7,8"

$.getJSON("your-restapi/ or x.php" + function (data) 

 $.each(data.yourdata, function() 
    $.each(this, function(k, v) 
          $('<tr>' +
                '<td>' + v.rowValues + '</td>' +
                '<td>' + v.colName + '</td>' +
              </tr>').appendTo("table-body");
        )
    );
);

【讨论】:

这个问题是关于 AngularJs 的。不建议将 JQuery 与 AngularJs 一起使用,建议使用 JQuery 而不是 AngularJs 的答案确实错过了问题的重点。

以上是关于解析 JSON 并绑定到动态创建的 HTML 表的行和列的主要内容,如果未能解决你的问题,请参考以下文章

公司动态添加行前台穿一个json的字符串到后台,并解析

解析 HTML 表的 JSON 对象

如果我在 jquery 绑定中更改,为啥 html 表的顺序不会改变?

如何解析 JSON 模式文件并使用许多列约束动态创建新的 Python 类?

Node.js 解析 HTML 表并以 JSON 格式获取结果

AngularJS:将数据绑定到动态创建的 HTML