Запись json-объекта в текстовый файл в javascript
У меня есть объект JSON в javascript. Я хочу просто написать объект JSON в текстовый файл. Из того, что я до сих пор обнаружил, видно, что это невозможно сделать из-за проблем с безопасностью на стороне клиента. Есть ли обходной путь?. Будет ли возможно модифицировать уже существующий файл, если сначала ввести некоторые фиктивные значения?
Спасибо
Ответы
Ответ 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);
}