Преобразование объекта в JSON и загрузка в виде файла .json в React

У меня есть объект javascript, содержащий некоторую информацию. Я хочу преобразовать это в JSON и загрузить как файл .json. Похоже, я могу просто на JSON.stringify(obj) преобразовать его в JSON но как мне загрузить его как файл .json?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
0
9 728
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы не сможете создать файл непосредственно в файловой системе вашего компьютера, так как это будет огромным риском для безопасности. Вы не можете сделать это с веб-страницы, используя JavaScript.

Вы можете написать службу на стороне сервера, чтобы публиковать свое состояние, и она создает файл - затем вы можете загрузить файл или довольствоваться тем, где он хранится на стороне сервера.

Другой способ через inMemory Создайте файл в памяти для загрузки пользователем, а не через сервер

Ответ принят как подходящий

Я не уверен, что это проблема, связанная с React, если вы просто хотите загрузить данные через JavaScript, но вот фрагмент, который я использую, который создает ссылку для загрузки содержимого данных, виртуально щелкая элемент и, наконец, удаляя его из ДОМ. Он должен поддерживать как современные браузеры, так и старые IE:

private exportToJson(objectData: SomeObject) {
    let filename = "export.json";
    let contentType = "application/json;charset=utf-8;";
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      var blob = new Blob([decodeURIComponent(encodeURI(JSON.stringify(objectData)))], { type: contentType });
      navigator.msSaveOrOpenBlob(blob, filename);
    } else {
      var a = document.createElement('a');
      a.download = filename;
      a.href = 'data:' + contentType + ',' + encodeURIComponent(JSON.stringify(objectData));
      a.target = '_blank';
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
    }
  }

Также стоит отметить, что есть несколько способов подойти к этому, как цитируется в этом вопросе SO.

Это хранит данные json как "{\" name \ ": \" cliff \ ", \" age \ ": \" 34 \ "}" например. Есть ли способ сделать его так, чтобы escape-символы были удалены, а каждое значение было на новой строке?

Rik van Velzen 16.12.2019 15:53

Интересно, что я не могу воспроизвести проблему с escape-символом, но для красивой печати вы можете использовать третий аргумент для JSON.stringify, например, JSON.stringify(objectData, null, 2), который будет включать символы LF для красивой печати и 2 пробела на уровень глубины в строковый объект.

Jonathan Michalik 17.12.2019 01:07

Я добавлю отдельно, что второй аргумент JSON.stringify - это заменитель, который может быть функцией, изменяющей ключи и значения в объекте. Я предполагаю, что вы могли бы использовать функцию, аналогичную той, которая предоставлена ​​в этот ответ, чтобы исправить печатаемые посторонние символы.

Jonathan Michalik 17.12.2019 01:09

Для тех, кто приезжает сюда и ищет более простое решение:

         <button
            href = {`data:text/json;charset=utf-8,${encodeURIComponent(
              JSON.stringify(YOURJSON)
            )}`}
            download = "filename.json"
          >
            {`Download Json`}
          </button>

Использование JSON.stringify (YOURJSON, null, '\ t') вместо этого также загрузит отформатированный json. Я предложил изменение.

Bouramas 18.02.2021 11:59

Другие вопросы по теме