Подтвердить что ты не робот

Запись json-объекта в текстовый файл в javascript

У меня есть объект JSON в javascript. Я хочу просто написать объект JSON в текстовый файл. Из того, что я до сих пор обнаружил, видно, что это невозможно сделать из-за проблем с безопасностью на стороне клиента. Есть ли обходной путь?. Будет ли возможно модифицировать уже существующий файл, если сначала ввести некоторые фиктивные значения?

Спасибо

4b9b3361

Ответ 1

Одна вещь, которую вы можете сделать, это настроить JSON как загрузку на лету.

var data = "{name: 'Bob', occupation: 'Plumber'}";
var url = 'data:text/json;charset=utf8,' + encodeURIComponent(data);
window.open(url, '_blank');
window.focus();

Рабочая демонстрация: http://jsfiddle.net/sLq3F/

Кроме того, вы не можете писать JSON в файл на стороне клиента по причинам безопасности. (В противном случае у вас есть доступ к файловым системам пользователей вашего сайта.) Для этого вам нужно будет использовать серверный язык и хранить файл на стороне сервера.


Исправление: Похоже, вы можете записать в файл, т.е. "изолированный раздел" файловой системы пользователя. См. Комментарий Кевина Джанцера ниже.

Другая коррекция. К сожалению, API файловой системы не используется. На веб-сайте HTMl5Rocks: "В апреле 2014 года на публичных веб-серверах было объявлено, что спецификация API файловой системы должна считаться мертвой. Другие браузеры не проявили большого интереса к ее реализации".

Ответ 2

Возможно, это решение немного более элегантно, протестировано в Chrome, FF и ie7 до ie10, протестировано с использованием текстовых, JSON, PDF и XLS-данных (с использованием соответствующего типа контента)

Либо поставьте функцию saveFile() с помощью капли данных, либо создайте блок данных "на лету" с type, установленным ни к чему, и ваши данные между []

В этом примере мы просто создадим объект settings и правильно установим тип данных.

settings = { any_kind_of_object: true };
json_str = JSON.stringify(settings);

saveFile('yourfilename.json', "data:application/json", new Blob([json_str],{type:""}));

function saveFile (name, type, data) {
    if (data != null && navigator.msSaveBlob)
        return navigator.msSaveBlob(new Blob([data], { type: type }), name);

    var a = $("<a style='display: none;'/>");
    var url = window.URL.createObjectURL(new Blob([data], {type: type}));
    a.attr("href", url);
    a.attr("download", name);
    $("body").append(a);
    a[0].click();
    setTimeout(function(){  // fixes firefox html removal bug
        window.URL.revokeObjectURL(url);
        a.remove();
    }, 500);  
}