将 JSON 显示为类似于下载的弹出窗口



我是前端开发的新手,并且在向新窗口显示json时遇到一些麻烦。目前,我让用户像这样下载 json


var blob = new Blob([$scope.data], {type: 'json'});
var downloadLink = angular.element('<a></a>');
downloadLink.attr('href', window.URL.createObjectURL(blob));
downloadLink.attr('download', 'data.json');
downloadLink[0].click();

这很好,因为当他们单击下载并打开链接时,JSON 会显示格式化,他们可以单击其中的各个部分,它会下拉以显示更多内容。

我正在尝试获取它,以便他们不再需要下载它,并且可以在新窗口中打开它。到目前为止,我得到的最接近的是这个

var x = window.open();
x.document.open();
x.document.write('<html><body><pre>' + $scope.data + '</pre></body></html>');
x.document.close();

显示 json,但不格式化。这是一行,而且非常长。有没有一种好方法可以格式化 json,使其看起来和通过浏览器打开 json 文件时一样好?

如果您只想格式化显示的 json,则可以使用JSON.stringifywith tent 参数,

...
const formattedJson = JSON.stringify($scope.data, null, 4); // Indented 4 spaces also 't' (tab) is allowed
x.document.write('<html><body><pre>' + formattedJson + '</pre></body></html>');
...

这可能对你有用,它可以很好地格式化 json。 https://prettier.io/docs/en/api.html

最新更新