简体   繁体   English

json2html - 创建 HTML 表格

[英]json2html - Create HTML table

I was trying to find good JS Plugin that will help me to generate HTML <table /> structure and fill it with JSON data.我试图找到好的 JS 插件来帮助我生成 HTML <table />结构并用JSON数据填充它。

I found json2html , but unfortunately I don't see any useful examples or documentation on plugin's official website, nor any 3rd party websites that I can look into.我找到了json2html ,但不幸的是,我在插件的官方网站上没有看到任何有用的示例或文档,也没有我可以查看的任何 3rd 方网站。

I created a function() that will generate some random data for me, that I will be using in this demo sample.我创建了一个function() ,它将为我生成一些随机数据,我将在此演示示例中使用。 Stored JSON template within variable that I will be using for json2html and created one <div /> with an ID that will be used for parsing JSON generated data using this plugin.将 JSON 模板存储在我将用于json2html 的变量中,并创建了一个带有 ID 的<div /> ,该 ID 将用于使用此插件解析 JSON 生成的数据。

// Demo function to generate random content
// ->
function generateChartData() {
 for (var i = 0; i < 5; i++) {
    var file_id = Math.floor(Math.random() * 90000) + 10000,
        file_name = 'Dummy File ' + Math.floor(Math.random() * 20) + 30 + '.zip',
        file_clicks = Math.round(Math.random() * 480) + 820,
        file_downloads = Math.round(Math.random() * 160) + 420,
        file_conversion = (file_clicks / file_downloads).toFixed(2),
        file_profit = Math.round(Math.random() * 120) + 310,
        file_cpa = (file_profit / file_downloads).toFixed(2),
        file_epc = (file_profit / file_clicks).toFixed(2);

    chartData.push({
      file_id: file_id,
      file_name: file_name,
      file_clicks: file_clicks,
      file_downloads: file_downloads,
      file_conversion: file_conversion,
      file_cpa: file_cpa,
      file_epc: file_epc,
      file_profit: file_profit
    });
  }

  // create variables but no values
  var total_clicks, total_downloads, total_conversion, total_profit, total_cpa, total_epc;
}
// <-

// Create html template for further json parsing
var template = {
  "tag": "table",
  "class": "table table-striped table-hover",
  "children": [
    {
      "tag": "thead",
      "id": "json-head",
      "children": [
        {
          "tag": "tr",
          "children": [
            {
              "tag": "th",
              "html": "ID"
            },
            {
              "tag": "th",
              "html": "File Name"
            },
            {
              "tag": "th",
              "html": "Clicks"
            },
            {
              "tag": "th",
              "html": "Downloads"
            },
            {
              "tag": "th",
              "html": "Conversion"
            },
            {
              "tag": "th",
              "html": "Average CPA"
            },
            {
              "tag": "th",
              "html": "EPC"
            },
            {
              "tag": "th",
              "html": "Profit"
            }
          ]
        }
      ]
    },
    {
      "tag": "tbody",
      "id": "json-body",
      "children": [
        {
          "tag": "tr",
          "children": [
            {
              "tag": "td",
              "html": "${file_id}"
            },
            {
              "tag": "td",
              "html": "${file_name}"
            },
            {
              "tag": "td",
              "html": "${file_clicks}"
            },
            {
              "tag": "td",
              "html": "${file_downloads}"
            },
            {
              "tag": "td",
              "html": "${file_conversion}"
            },
            {
              "tag": "td",
              "html": "${file_cpa}"
            },
            {
              "tag": "td",
              "html": "${file_epc}"
            },
            {
              "tag": "td",
              "html": "${file_profit}"
            }
          ]
        }
      ]
    },
    {
      "tag": "tfoot",
      "id": "json-foot",
      "children": [
        {
          "tag": "tr",
          "children": [
            {
              "tag": "td",
              "colspan": "2",
              "html": "Total / Average"
            },
            {
              "tag": "td",
              "html": "${total_clicks}"
            },
            {
              "tag": "td",
              "html": "${total_downloads}"
            },
            {
              "tag": "td",
              "html": "${total_conversion}"
            },
            {
              "tag": "td",
              "html": "${total_cpa}"
            },
            {
              "tag": "td",
              "html": "${total_epc}"
            },
            {
              "tag": "td",
              "html": "${total_profit}"
            }
          ]
        }
      ]
    }
  ]
};

// Empty array for json data
var chartData = [];

// Calling DEMO function to generate json data
generateChartData();

// Parse json data and generate html
$("#json-parse").json2html(chartData, template);

However, you will probably noticed that something is wrong with my JSON template or json2html call.但是,您可能会注意到我的JSON模板或json2html调用有问题。 It creates invalid table and generates table for each JSON data parsing.它创建无效表并为每个 JSON 数据解析生成表。 So unfortunately that is not something that I wanted.所以不幸的是,这不是我想要的。

My thought is to create following template and parse required information into <tbody /> & <tfoot /> but not to create them all over again.我的想法是创建以下模板并将所需信息解析为<tbody /> & <tfoot />但不要重新创建它们。

<table class="table table-striped table-hover">
<thead id="json-head">
    <tr>
        <th>ID</th>
        <th>File Name</th>
        <th>Clicks</th>
        <th>Downloads</th>
        <th>Conversion</th>
        <th>Average CPA</th>
        <th>EPC</th>
        <th>Profit</th>
    </tr>
</thead>

<tbody id="json-body">
    <tr>
        <td>${file_id}</td>
        <td>${file_name}</td>
        <td>${file_clicks}</td>
        <td>${file_downloads}</td>
        <td>${file_conversion}</td>
        <td>${file_cpa}</td>
        <td>${file_epc}</td>
        <td>${file_profit}</td>
    </tr>
</tbody>

<tfoot id="json-foot">
    <tr>
        <td colspan="2">Total / Average</td>
        <td>${total_clicks}</td>
        <td>${total_downloads}</td>
        <td>${total_conversion}</td>
        <td>${total_cpa}</td>
        <td>${total_epc}</td>
        <td>${total_profit}</td>
    </tr>
</tfoot>

I can't provide JSFiddle unfortunately, because I can't find any CDN for it.不幸的是,我无法提供 JSFiddle,因为我找不到任何 CDN。 But here is Screenshot that will show you what the undesired outcome looks like.但这里的屏幕截图将向您展示不想要的结果是什么样子。

json2html - 糟糕的结果

I know it is my structure of JSON or the plugin call that I did not setup properly, but if you don't mind helping me out here.我知道这是我的 JSON 结构或我没有正确设置的插件调用,但如果你不介意在这里帮助我。 It's a real headache, but may help other users as well.这确实令人头疼,但也可能对其他用户有所帮助。

json2Html is generating your template inside a loop with counter that equals with your json object count. json2Html正在循环内生成模板,该循环的计数器等于您的 json 对象计数。 So the result which you see is not wrong.所以你看到的结果没有错。 If you don't want to repeat header and footer, just use those as another template with an object array.如果您不想重复页眉和页脚,只需将它们用作具有对象数组的另一个模板。
Update : Thanks @Volune for example .更新:例如感谢@Volune。

// Create html template for further json parsing
        var headertemplate = {
            "tag": "thead",
              "id": "json-head",
              "children": [
                {
                  "tag": "tr",
                  "children": [
                    {
                      "tag": "th",
                      "html": "ID"
                    },
                    {
                      "tag": "th",
                      "html": "File Name"
                    },
                    {
                      "tag": "th",
                      "html": "Clicks"
                    },
                    {
                      "tag": "th",
                      "html": "Downloads"
                    },
                    {
                      "tag": "th",
                      "html": "Conversion"
                    },
                    {
                      "tag": "th",
                      "html": "Average CPA"
                    },
                    {
                      "tag": "th",
                      "html": "EPC"
                    },
                    {
                      "tag": "th",
                      "html": "Profit"
                    }
                  ]
                }
              ]
        }
        var footertemplate = { 
              "tag": "tfoot",
              "id": "json-foot",
              "children": [
                {
                  "tag": "tr",
                  "children": [
                    {
                      "tag": "td",
                      "colspan": "2",
                      "html": "Total / Average"
                    },
                    {
                      "tag": "td",
                      "html": "${total_clicks}"
                    },
                    {
                      "tag": "td",
                      "html": "${total_downloads}"
                    },
                    {
                      "tag": "td",
                      "html": "${total_conversion}"
                    },
                    {
                      "tag": "td",
                      "html": "${total_cpa}"
                    },
                    {
                      "tag": "td",
                      "html": "${total_epc}"
                    },
                    {
                      "tag": "td",
                      "html": "${total_profit}"
                    }
                  ]
                }
              ]
        }
        var template = {
          "tag": "table",
          "class": "table table-striped table-hover",
          "children": [ 
            {
              "tag": "tbody",
              "id": "json-body",
              "children": [
                {
                  "tag": "tr",
                  "children": [
                    {
                      "tag": "td",
                      "html": "${file_id}"
                    },
                    {
                      "tag": "td",
                      "html": "${file_name}"
                    },
                    {
                      "tag": "td",
                      "html": "${file_clicks}"
                    },
                    {
                      "tag": "td",
                      "html": "${file_downloads}"
                    },
                    {
                      "tag": "td",
                      "html": "${file_conversion}"
                    },
                    {
                      "tag": "td",
                      "html": "${file_cpa}"
                    },
                    {
                      "tag": "td",
                      "html": "${file_epc}"
                    },
                    {
                      "tag": "td",
                      "html": "${file_profit}"
                    }
                  ]
                }
              ]
            } 
          ]
        }; 

    // Empty array for json data
    var chartData = [];

    // Calling DEMO function to generate json data
    generateChartData(); 
    // Parse json data and generate html
    $("#json-parse").json2html(chartData[0], headertemplate);
    $("#json-parse").json2html(chartData, template);
    $("#json-parse").json2html(chartData[0], footertemplate); //use your total json object with one array inside, instead chartData[0];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM