在 Electron 中节省 JSON

Saving JSON in Electron

我正在使用 Electron 构建应用程序。在此应用程序中,我正在使用 JSON 构建数据结构。我的数据结构如下所示:

{
  items: [
    { id:1, name:'football' },
    { id:2, name:'soccer ball' },
    { id:3, name:'basketball' }
  ]
}

我想将此 JSON 保存到名为 "data.json" 的文件中。我想把它保存到一个文件中,因为我想在下次应用程序启动时加载。我的挑战是,我不知道如何保存数据。事实上,我什至不确定 在哪里 我什至应该保存文件。我是否将其保存在与应用程序相同的目录中?或者我应该使用一些跨平台的方法吗?

目前,我有:

saveClick: function() {
  var json = JSON.stringify(this.data);
  // assume json matches the JSON provided above.
  // Now, I'm not sure how to actually save the file.
} 

那么,如何/在哪里将 JSON 保存到本地文件系统以供以后使用?

Electron 缺少一种简单的方法来保存和读取应用程序的用户设置。 electron-json-storage 实现了一个类似于 localStorage 的 API 来写入和读取 JSON 对象 to/from 操作系统应用程序数据目录,由 app.getPath('userData') 定义.

我编写了一个您可以使用的简单库,具有简单的界面,它还创建子目录并与 promises/callbacks 一起使用。 它会将数据保存到 app.getPath("appData") 作为根文件夹。

https://github.com/ran-y/electron-storage

安装

$ npm install --save electron-storage

用法

const storage = require('electron-storage');

API

storage.get(filePath, (err, data) => {
  if (err) {
    console.error(err)
      } else {
        console.log(data);
      }
    });

storage.get(filePath)
    .then(data => {
      console.log(data);
    })
    .catch(err => {
      console.error(err);
    });

storage.set(filePath, data, (err) => {
      if (err) {
        console.error(err)
      }
    });

storage.set(filePath, data)
    .then(data => {
      console.log(data);
    })
    .catch(err => {
      console.error(err);
    });

Electron 以 node.js 为核心。您可以使用以下内容:

var fs = require("fs");
read_file = function(path){
     return fs.readFileSync(path, 'utf8');
}

write_file = function(path, output){
    fs.writeFileSync(path, output);
}

对于 write_file(),您可以传递 "document.txt" 作为路径,它会将其写入与 运行 来自的 html 文件相同的目录。您也可以输入完整路径,例如 "C:/Users/usern/document.txt",它会写入您想要的特定位置。

另外,您可以选择任何您想要的文件扩展名(即“.txt”、“.js”、“.json”等)。您甚至可以自己制作!

`const fs = require('fs');

let student = { 
    name: 'Mike',
    age: 23, 
    gender: 'Male',
    department: 'English',
    car: 'Honda' 
};
 
let data = JSON.stringify(student, null, 2);

fs.writeFile('student-3.json', data, (err) => {
    if (err) throw err;
    console.log('Data written to file');
});

console.log('This is after the write call');`

有多个步骤:
步骤 1
从版本 5 开始,nodeIntegration 的默认值从 true 更改为 false。您可以在创建浏览器时启用它 Window:

const createWindow = () => {
  const win = new BrowserWindow({
     width: 1000,
     height: 800,
     webPreferences: {
       nodeIntegration: true,
       contextIsolation: false,
     }
  })
}

步骤 2:

function writetofile() {
        let configsettings = {
          break: output.innerHTML,
          alwaysonoff: toggleoutput.innerHTML,
        };

        let settings_data = JSON.stringify(configsettings, null, 2);

        const fs = require("fs");

        fs.writeFileSync("assets/configs/settings.json", settings_data);
      }