将 AWS MySQL 查询的 JSON 输出并在网页上显示为 DataTable

Posted

技术标签:

【中文标题】将 AWS MySQL 查询的 JSON 输出并在网页上显示为 DataTable【英文标题】:Taking JSON output of AWS MySQL query and surfacing as DataTable on web page 【发布时间】:2020-03-27 15:38:42 【问题描述】:

我已通过 AWS API Gateway 成功地将网页连接到 Lambda 函数,以在 Aurora Serverless mysql 数据库上调用 SQL 查询。我只是将完整的返回 JSON(以字符串形式)传递给网页,它显示如下:

根据查询,列可能会有所不同。我希望能够获取响应输出并使用网站上的 DataTable 将其可视化。有没有办法动态创建 DataTable,大概是通过访问 JSON 对象中的特定键(不是字符串形式)?

免责声明:除此之外,我对 javascript/jQuery/JSON 格式的经验很少。

更新

我更新了我的代码,现在输出显示在两个文本框中(我的目标是获取列名和相应数据的列表,并根据查询结果动态构建 DataTable)。下图显示了顶部文本框中的列标题和 JSON 中记录字典中的单个值。示例代码如下。

var DisplayQuery;
(function($) 
  DisplayQuery = function() 
    $.ajax(
      method: 'POST',
      url: '***',
      beforeSend: function(xhr) 
        xhr.setRequestHeader("access-control-allow-origin", "*")
            ,
      data: JSON.stringify(
        "sqlStatement": $('#sql-placeholder').val()
      ),
      contentType: 'application/json',
      success: function(response) 
        var colLabels = [];
        for (i = 0; i < response.sqlStatementResults[0].resultFrame.resultSetMetadata.columnMetadata.length; i++) 
          colLabels.push(response.sqlStatementResults[0].resultFrame.resultSetMetadata.columnMetadata[i].name)
        ;
        $('#test-box-1').text(JSON.stringify(colLabels));
        $('#test-box-2').text(JSON.stringify(response.sqlStatementResults[0].resultFrame.records[0]));
      ,
      error: function ajaxError(error) 
        console.error('Error in SQL request');
      
    )
  
(jQuery));

我的 index.html 中的相应元素如下。我还没有为要在此处创建的 DataTable 创建元素。

<div class="container-fluid">
   <p class= "test-box-class" id="test-box-1"><i>This is a test box for database query connection</i></p>
</div>

<div class="container-fluid">
   <p class= "test-box-class" id="test-box-2"><i>This is a test box for database query connection</i></p>
</div>

【问题讨论】:

你能发一些代码吗 @ArunmainthanKamalanathan 我已经根据目前的进展发布了一些额外的信息 你在说这个数据表吗datatables.net/manual/installation @ArunmainthanKamalanathan 我相信是这样......我不完全确定我想,我试图用 Bootstrap 配置我的网页,我看到了这个:datatables.net/examples/styling/bootstrap4——只要我能使用 CSV 导出选项在页面上的表格中动态显示查询结果,这对我来说很好!我假设为这些事情提供的这种 DataTable 格式可以轻松完成。 关键主要是根据指定的查询,列可能会发生变化。 【参考方案1】:

以下是您可以如何使用数据表。你需要先在你的 html 中声明一个 div 来显示数据表。

<div class="container-fluid">
  <div id="data-table-container"></div>
</div>

然后在您的 jquery 代码中,初始化 DataTable

$.ajax(
  method: 'POST',
  url: '***',
  success: function (response) 

    // format the column labels to [data: 'Column Name 1']
    const colLabels = response.sqlStatementResults[0].resultFrame.resultSetMetadata.columnMetadata.map(value => 
      return 
        data: value
      
    )

    $('#data-table-container').DataTable(
      data: JSON.stringify(response.sqlStatementResults[0].resultFrame.records),
      columns: colLabels
    )

  ,
  error: function ajaxError(error) 

  
)

这里是文档 https://datatables.net/manual/data/

【讨论】:

以上是关于将 AWS MySQL 查询的 JSON 输出并在网页上显示为 DataTable的主要内容,如果未能解决你的问题,请参考以下文章

mysql 将两个SQL语句查询结果并在一起

PHP JSON 将输出数字编码为字符串

MySQL 查询返回 JSON 数据需要很长时间

返回码:1 输出:Dockerfile 和 Dockerrun.aws.json 都丢失,中止部署

MySQL 查询的 JSON 输出在超过 1026 字节时不显示数据

在 AWS AppSync 查询中返回嵌套 JSON