【问题标题】:Downloading json including newline characters via data uri通过数据uri下载包含换行符的json
【发布时间】:2018-03-06 10:06:35
【问题描述】:

我有一个 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 之前打印的控制台上的输出仍然包含换行符。谁能告诉我为什么会发生这种情况以及如何防止在保存文件时删除换行符?

【问题讨论】:

    标签: javascript jquery json data-uri


    【解决方案1】:

    问题在于不同操作系统上的不同行尾。试试这个例子...

    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();

    您最终可以检测到主机操作系统并将所有\n 替换为\r\n

    【讨论】:

    • .replace(/\n/g, "\r\n"); 不应该解决这个问题吗?另外,不应该 \n 也可以工作,因为我正在用 notepad++ 打开文件?
    • 问题实际上是我缺少 encodeURIComponent() :) 你的代码 sn-p 让我意识到,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-03-05
    • 2011-09-07
    • 2015-07-27
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2019-03-12
    • 2012-07-20
    相关资源
    最近更新 更多