如何读取json并以html显示

时间:2019-02-07 07:35:56

标签: javascript json report

我正在下订单,并将订单信息存储在JSON文件(order_details.json)中。这就是数据的样子:

[{
    "uniqueID": "CHECKOUT_IE01",
    "orderID": "4001820182",
    "date": "06-02-2019 16:55:32.321",
    "cartTotal": "€19.98"
}, {
    "uniqueID": "CHECKOUT_DK01",
    "orderID": "6001825057",
    "date": "06-02-2019 16:56:15.976",
    "cartTotal": "318 DKK"
}]

现在我想制作一个HTML报告,在其中我可以获取所有这些数据并可以html格式显示。

不知道我必须使用哪种技术。到目前为止,我尝试过的是创建如下的js代码:

var fs = require(['fs']);
var data = fs.readFileSync("D:\\order-detail.json", "utf8");
var data1 = JSON.parse(data);
console.log(data1);
var unique_id = data1[0].uniqueID;  
var order_id = data1[0].orderID;    
var order_date = data1[0].date; 
var cart_total = data1[0].cartTotal;

document.getElementById("uid").innerHTML = unique_id;
document.getElementById("oid").innerHTML = order_id;
document.getElementById("date").innerHTML = order_date;
document.getElementById("ctotal").innerHTML = cart_total; 

和HTML

<body onload="myFunction()">
<h3>Values from Json</h3>
<div>
<span id="uid"></span>
<span id="oid"></span>
<span id="date"></span>
<span id="ctotal"></span>
</div>

但是它不起作用,我在控制台中遇到错误-

dashboard.html:8 Uncaught TypeError: fs.readFileSync is not a function
    at myFunction (dashboard.html:8)
    at onload (dashboard.html:25)
myFunction @ dashboard.html:8
onload @ dashboard.html:25
require.js:5 GET file:///D:/JSON/fs.js net::ERR_FILE_NOT_FOUND
req.load @ require.js:5
load @ require.js:5
load @ require.js:5
fetch @ require.js:5
check @ require.js:5
enable @ require.js:5
enable @ require.js:5
(anonymous) @ require.js:5
(anonymous) @ require.js:5
each @ require.js:5
enable @ require.js:5
init @ require.js:5
(anonymous) @ require.js:5
setTimeout (async)
req.nextTick @ require.js:5
o @ require.js:5
requirejs @ require.js:5
myFunction @ dashboard.html:7
onload @ dashboard.html:25
require.js:5 Uncaught Error: Script error for "fs"
http://requirejs.org/docs/errors.html#scripterror
    at makeError (require.js:5)
    at HTMLScriptElement.onScriptError (require.js:5)

我不确定发生了什么问题或使用的方式有误。任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

我认为您正在将Node与普通的浏览器JavaScript混合使用。普通的JavaScript没有require的定义,因为它是因为您正在使用的另一个库已声明它不会满足您的期望。从浏览器加载数据的最简单方法是使用XMLHttpRequest,下面是一个示例:

loadURL("file:///D:/order-detail.json", onDataLoaded);

function onDataLoaded(data) {
  data = JSON.parse(data);
  var unique_id = data[0].uniqueID;
  var order_id = data[0].orderID;
  var order_date = data[0].date;
  var cart_total = data[0].cartTotal;

  document.getElementById("uid").innerHTML = unique_id;
  document.getElementById("oid").innerHTML = order_id;
  document.getElementById("date").innerHTML = order_date;
  document.getElementById("ctotal").innerHTML = cart_total;
}

function loadURL(url, callBack) {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url, true);
  xhr.setRequestHeader("Accept", "application/json");
  xhr.onloadend = onLoadEnd(xhr, callBack);
  xhr.send();
}

function onLoadEnd(request, callBack) {
  return function() {
    var status = request.status;
    var result = String(request.response);
    if (status >= 200 && status < 300) callBack(result);
  };
}

由于安全原因,某些浏览器(例如Chrome)可能会阻止该请求。要解决此问题,请尝试将JSON文件添加到IIS(然后将file://D:\\order-detail.json更改为localhost/addPathHere/order-detail.json)。 这是simple tutorial,用于激活本地IIS服务器(假设您使用的是Windows)。

答案 1 :(得分:1)

这应该有效。

用您的json文件路径替换 ./ JSON / order-detail.json

$.getJSON('./data.json', function(item) {
  item.forEach(function(data) {
    return [
      document.getElementById("uid").innerHTML += data.uniqueID + "</br>",
      document.getElementById("oid").innerHTML += data.orderID + "</br>",
      document.getElementById("date").innerHTML += data.date + "</br>",
      document.getElementById("ctotal").innerHTML += data.cartTotal + "</br>"
    ];
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Values from Json</h3>
<div>
  <span id="uid"></span>
  <span id="oid"></span>
  <span id="date"></span>
  <span id="ctotal"></span>
</div>

答案 2 :(得分:0)

您正在客户端JavaScript中使用NodeJS模式。在前端,您可以直接使用JSON导入jQuery文件。

$(function(){
        $.getJSON('order-detail.json',function(data){
            $.each(data,function(i,order){

             //your implementation here..
             // Can access data like order.uniqueID , order.orderID

            });
        }).error(function(){
            console.log('error');
        });
    });
  

.json 文件应该可以在您的域下访问,例如CSS,JS,Image resources。您无法使用完整路径访问,例如C:\yourpath\file.json