将 JSON 字符串转换为对象并显示为 HTML 表格

Posted

技术标签:

【中文标题】将 JSON 字符串转换为对象并显示为 HTML 表格【英文标题】:Convert JSON string to object and display as HTML table 【发布时间】:2019-12-22 10:29:08 【问题描述】:

我有一个dropdown select optiononchange event,它将通过AJAX 将选定的值发送到我的控制器,然后根据mysql 数据库中的选定值查询数据并将其作为JSON 对象返回给我的刀片。

我的问题是 mysql 数据库中的 JSON 数据当前在字符串中作为单行。如何将其转换回普通的JSON 对象,并在新窗口中根据列名将每个值显示为html 表。

假设是这样的过程

    从下拉选项中选择日期。 根据所选日期从数据库中获取数据。 将 JSON 字符串转换为对象并将其返回给刀片。 在新窗口中将数据显示为 HTML 表格。

将 JSON 插入 MySQL 数据库的控制器代码

$sqlquery = DB::connection('sqlsrv')
                ->table('Stocks')
                ->join('StockTransactions', 'Stocks.Id', '=', 'StockTransactions.StockId')
                ->select(
                   'TransactionDate',
                   'DocumentCode',
                   'DocType',
                   'StockName',
                   DB::raw("FORMAT(SUM(UOMQty), 'N') AS TotalUOMQty"),
                   DB::raw("FORMAT(SUM(UOMPrice), 'N') AS TotalUOMPrice"),
                   DB::raw("FORMAT(CurrentBalance, 'N') AS CurrentBalance"),
                   DB::raw("FORMAT(((SUM(UOMPrice) / SUM(UOMQty)) * CurrentBalance), 'N') AS Total")
                    )
                ->where([
                    ['UOMQty', '>', '0'],
                    ['DocumentCode', 'NOT LIKE', 'SA%'],
                    ['DocumentCode', 'NOT LIKE', 'SIN%']
                ])
                ->WhereBetween('TransactionDate', ['01-01-2000', $dateto])
                ->groupBy('StockName', 'TransactionDate', 'CurrentBalance', 'DocumentCode', 'DocType')
                ->orderBy('TransactionDate', 'ASC')
                ->get();

$array = json_decode(json_encode($sqlquery), true);
$json  = json_encode($array);

 DB::connection('mysql')
     ->table('records')
     ->insert(['record' => $json, 'date_from' => "2000-01-01", 'date_to' => "$dateto", 'date_inquiry' => "$getCurrentDateTimeTo"]);

用于从 MySQL 数据库获取 JSON 的控制器代码

public function getmysqldata(Request $request)

  $request_data = $request->all();
  $dateInquiry = $request_data['dateInquiry'];

  $result = DB::connection('mysql')
                ->table('records')
                ->where([
                  'date_inquiry' => "$dateInquiry"
                ]) 
                ->get();

  return response()->json($result);

Index.blade.php

Record Available :                             
<select name="recordavailable" id="recordavailable">
  @if(!empty($inquiry_date))
    <option value="">Please select records</option> 
    @foreach ($inquiry_date as $date_inquiry)
      <option value=" $date_inquiry->date_inquiry"> $date_inquiry->date_inquiry</option>
    @endforeach  
  @else 
    option value="">No records</option>                
  @endif                                  
</select>

脚本

$(document).on("change", 'select#recordavailable', function(e) 

   var dateInquiry = $(this).val();
   $.ajax
   (
      type: "GET",               
      data: 'dateInquiry='+dateInquiry,               
      url: 'getmysqldata',
      dataType: 'JSON',                
      success: function(data) 
       
         var randomnumber = Math.floor((Math.random()*100)+1); 

         var winPrint = window.open('',"",'PopUp'+randomnumber+', "scrollbars=1,menubar=0,resizable=1"');

         winPrint.document.write('<title>Display Record of '+dateInquiry+'</title><style>table border-collapse: collapse;border-spacing: 0;'+
                            'width: 100%;border: 1px solid #ddd;table, td, thborder: 1px solid black;text-align:center;padding: 5px;#stockname text-align: left;'+
                            'h3 text-align:center;#qty, #cost, #balance, #total text-align: right;</style><h3>'+dateInquiry+'</h3>'); 

         winPrint.document.write(JSON.stringify(data));
       
   );            
);

控制台

输出

我想要的输出

【问题讨论】:

winPrint.document.write(JSON.stringify(data)); 实际上只是将 JSON 字符串转储到浏览器。 JSON 对象是 data 仍然是一个 JSON 对象,不管它是一行还是多行。响应 JSON 的服务器会将其压缩为一行以节省带宽。您需要将 JSON 解析为表格。 ***.com/a/17785623/10634638 【参考方案1】:

您需要将记录表中的记录列转换为数组,这将在输出中将其转换为正确的 json。

https://laravel.com/docs/5.8/eloquent-mutators#array-and-json-casting

【讨论】:

我不使用模型

以上是关于将 JSON 字符串转换为对象并显示为 HTML 表格的主要内容,如果未能解决你的问题,请参考以下文章

如何将JSON转换为HTML格式并显示

js 将json字符串转换为json对象的方法解析

php如何将json对象转字符串

如何将 HTML 转换为字符串 android 并打印该字符串

将嵌套的 Json 字符串转换为对象并在 Jquery 数据表单元格中呈现

js 将json字符串转换为json兑现