通过数据 uri 下载 json 包括换行符
Downloading json including newline characters via data uri
我有一个 Web 应用程序,我在其中生成了一个巨大的 JSON。我现在希望用户能够下载 JSON。因此,我使用以下代码:
function saveJSON() {
var data = JSON.parse(localStorage.getItem('result'));
var jsonResult = [];
for (i = 0; i < data.length; i++) {
var item = expandJsonInJson(data[i]);
lineToWrite = JSON.stringify(item, undefined, "\t").replace(/\n/g, "\r\n");
jsonResult.push(lineToWrite);
}
if (jsonResult.length != 0) {
console.debug(jsonResult);
saveText(jsonResult, 'logentries.txt');
} else {
$('#coapEntries')
.append('<li class="visentry">' + "Your query returned no data!" +
'</li>');
}
}
function saveText(text, filename) {
var a = document.createElement('a');
a.setAttribute('href', 'data:application/octet-stream;charset=utf-8,' + text);
a.setAttribute('download', filename);
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
但是,生成的文件不包含任何换行符,它是单行。我在调用 saveText 之前打印的控制台输出仍然包含换行符。谁能告诉我为什么会这样,以及如何防止在保存文件时删除换行符?
问题在于不同 OS 上的不同行结尾。试试这个例子...
var json = '{\n\t"foo": 23,\n\t"bar": "hello"\n}';
var a = document.createElement('a');
document.body.appendChild(a);
a.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(json));
a.setAttribute('download', 'test.json');
a.click();
var jsonWindows = '{\r\n\t"foo": 23,\r\n\t"bar": "hello"\r\n}';
a.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(jsonWindows));
a.setAttribute('download', 'test (Windows).json');
a.click();
您最终可以检测到主机 OS 并将所有 \n
替换为 \r\n
。
我有一个 Web 应用程序,我在其中生成了一个巨大的 JSON。我现在希望用户能够下载 JSON。因此,我使用以下代码:
function saveJSON() {
var data = JSON.parse(localStorage.getItem('result'));
var jsonResult = [];
for (i = 0; i < data.length; i++) {
var item = expandJsonInJson(data[i]);
lineToWrite = JSON.stringify(item, undefined, "\t").replace(/\n/g, "\r\n");
jsonResult.push(lineToWrite);
}
if (jsonResult.length != 0) {
console.debug(jsonResult);
saveText(jsonResult, 'logentries.txt');
} else {
$('#coapEntries')
.append('<li class="visentry">' + "Your query returned no data!" +
'</li>');
}
}
function saveText(text, filename) {
var a = document.createElement('a');
a.setAttribute('href', 'data:application/octet-stream;charset=utf-8,' + text);
a.setAttribute('download', filename);
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
但是,生成的文件不包含任何换行符,它是单行。我在调用 saveText 之前打印的控制台输出仍然包含换行符。谁能告诉我为什么会这样,以及如何防止在保存文件时删除换行符?
问题在于不同 OS 上的不同行结尾。试试这个例子...
var json = '{\n\t"foo": 23,\n\t"bar": "hello"\n}';
var a = document.createElement('a');
document.body.appendChild(a);
a.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(json));
a.setAttribute('download', 'test.json');
a.click();
var jsonWindows = '{\r\n\t"foo": 23,\r\n\t"bar": "hello"\r\n}';
a.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(jsonWindows));
a.setAttribute('download', 'test (Windows).json');
a.click();
您最终可以检测到主机 OS 并将所有 \n
替换为 \r\n
。