You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AngularJS基于动态生成的多键名JSON创建表格?

动态生成结构不固定的JSON数据表格

当然有简便的实现方法!核心思路就是先提取所有JSON对象中出现过的唯一键作为表头,再遍历每个对象填充对应单元格,不管每个对象的键是否完全一致。下面给你两种常见场景的实现:


原生JavaScript(纯前端渲染)

假设你有一组动态JSON数据:

const dynamicData = [
  {"date": "10-10-2010", "Cost":"10", "Column3": 20},
  {"date": "11-10-2010", "Column1":"ex", "Column2": 1, "Column4": "text"}
];

可以用这段函数直接生成表格HTML:

function generateDynamicTable(data) {
  // 处理空数据的情况
  if (!data || data.length === 0) return "<p>No data available</p>";
  
  // 提取所有唯一的键,作为表头列名
  const allKeys = [...new Set(data.flatMap(item => Object.keys(item)))];
  
  // 构建表格结构
  let tableHtml = "<table style='border-collapse: collapse; margin: 1rem 0;'>";
  // 表头部分
  tableHtml += "<thead><tr>";
  allKeys.forEach(key => {
    tableHtml += `<th style='border: 1px solid #ccc; padding: 0.5rem; background: #f5f5f5;'>${key}</th>`;
  });
  tableHtml += "</tr></thead><tbody>";
  
  // 表格内容行
  data.forEach(item => {
    tableHtml += "<tr>";
    allKeys.forEach(key => {
      // 处理对象没有该键的情况,显示空字符串或自定义默认值
      const cellValue = item[key] ?? "";
      tableHtml += `<td style='border: 1px solid #ccc; padding: 0.5rem;'>${cellValue}</td>`;
    });
    tableHtml += "</tr>";
  });
  
  tableHtml += "</tbody></table>";
  return tableHtml;
}

// 渲染到页面
document.getElementById("table-container").innerHTML = generateDynamicTable(dynamicData);

这段代码做了这些事:

  • 自动收集所有出现过的键,不会遗漏任何列
  • 处理某个对象缺少特定键的情况,避免报错,显示空值
  • 加了基础样式让表格看起来更美观,你可以根据需求修改CSS

React框架中的实现

如果是在React项目里,用JSX实现会更贴合框架风格:

function DynamicTable({ data }) {
  if (!data || data.length === 0) return <p>No data available</p>;
  
  // 提取所有唯一列名
  const allKeys = [...new Set(data.flatMap(item => Object.keys(item)))];
  
  return (
    <table style={{ borderCollapse: 'collapse', margin: '1rem 0' }}>
      <thead>
        <tr>
          {allKeys.map(key => (
            <th 
              key={key} 
              style={{ border: '1px solid #ccc', padding: '0.5rem', backgroundColor: '#f5f5f5' }}
            >
              {key}
            </th>
          ))}
        </tr>
      </thead>
      <tbody>
        {data.map((item, rowIndex) => (
          <tr key={rowIndex}>
            {allKeys.map(key => (
              <td 
                key={key} 
                style={{ border: '1px solid #ccc', padding: '0.5rem' }}
              >
                {item[key] ?? ""}
              </td>
            ))}
          </tr>
        ))}
      </tbody>
    </table>
  );
}

// 使用组件
// <DynamicTable data={dynamicData} />

额外说明

  • 如果你的JSON是嵌套结构(比如某个键对应另一个对象),需要稍微修改键的提取逻辑(比如递归遍历所有嵌套键),但如果是扁平结构,上面的代码完全够用
  • 你可以根据需求调整默认值(比如把?? ""改成?? "N/A"),或者添加排序、筛选等功能

内容的提问来源于stack exchange,提问作者plxhelpme_kindofuser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:10:25