Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过electron store将应用程序名称和路径添加到JSON文件中的列表_Javascript_Json_Electron - Fatal编程技术网

Javascript 如何通过electron store将应用程序名称和路径添加到JSON文件中的列表

Javascript 如何通过electron store将应用程序名称和路径添加到JSON文件中的列表,javascript,json,electron,Javascript,Json,Electron,我想做一个简单的游戏发射器。从用户可自定义的列表中启动一个特定的游戏和工具应用程序。使用electron store和showOpenDialog,我选择了一个工具可执行文件,showOpenDialog从Dialog获取一个完整路径,然后将其转换为var_toolName(简化文件名,path.basename+regex+replace)和var_toolPath(用join()字符串化的完整路径)。这两个变量都通过electron store存储在配置文件中。一个问题是我不知道如何将下一个

我想做一个简单的游戏发射器。从用户可自定义的列表中启动一个特定的游戏和工具应用程序。使用electron store和showOpenDialog,我选择了一个工具可执行文件,showOpenDialog从Dialog获取一个完整路径,然后将其转换为var_toolName(简化文件名,path.basename+regex+replace)和var_toolPath(用join()字符串化的完整路径)。这两个变量都通过electron store存储在配置文件中。一个问题是我不知道如何将下一个工具可执行文件追加到列表中,而不是替换,我已经尝试了几天

我期望config.JSON中的JSON应用程序列表会看到什么(只是一个想法,而不是具体的编码):

  • 工具:(所以我知道它是config.json中与应用程序列表相关的一部分,总体上config.json只存储了一些简单的东西,比如窗口位置、游戏可执行路径)
    • 工具名1
      • 工具路径1
    • 工具名2
      • 工具路径2
    • 工具名3
      • 工具路径3
等等,

这个JSON列表的两个角色是在electron应用程序中创建一个HTMl列表(这样用户就知道什么工具将与游戏一起启动,并且可以选择打开/关闭特定的工具并删除,我还没有达到这一部分,我猜这需要在Electronics store和ipcMain/渲染器上做一些工作)。第二个角色将包括与游戏可执行文件一起启动的工具的完整路径

用于选择工具可执行文件并将内容保存到config.json的脚本:

const AppConfig = require('electron-store')
const appConfig = new AppConfig()
const path = require('path') //for executable/game folder path manipulations

//*****************************
// add tools
//*****************************

// 1. detect button click
document.getElementById('add').addEventListener('click', addTool);

//2. select tool exe + save path
function addTool() {
    dialog.showOpenDialog({
            title: 'Select tool executable.',
            filters: [{
                name: 'Tool start file',
                extensions: ['exe', 'jar']
            }],
            properties: ['openFile']
        },
        (exeFromDialog) => {
            var var_exeToolPath = exeFromDialog.join(); //removes square brackets
            var var_toolName = path.basename(var_exeToolPath).split(/[/._-]/g)[0];
            //path.basename removes path until file, split+regex takes only first part until first character (one of ._/)

            appConfig.set(
                "tools", {
                    "toolName": var_toolName,
                    "toolPath": var_exeToolPath
                }
            )
        })
}
当前config.json的外观(“工具”部分刚刚被替换,而不是被追加)

应用程序的当前外观(列表只是一个假填充):


您需要先获取可用的工具,然后将新工具附加到其中并保存 见下文

let _tools = appConfig.get("tools");
if(!_tools){
    _tools = {};
}

_tools[var_toolName] = var_exeToolPath;

appConfig.set(
    "tools", _tools
)
所以预期的产出是,

{
   .
   .
   .,
   "tools": {
       "tool1": "D:\\tool1.jar",
       "tool2": "D:\\tool2.jar",
       "tool3": "D:\\tool3.jar"
   }
}

谢谢,你能告诉我“_tools[var_toolName]=var_exeToolPath;”有什么作用吗?@namelessone它使用var_toolName创建一个键,并将值var_exeToolPath分配给它。我曾尝试将JSON转换为HTML列表,但似乎没有属性标识符(比如
var_toolPath
工具路径的
“toolName”
对于
var_exeToolPath
),我不能仅从JSON列表中提取工具名来注入HTML列表,并且可能需要工具路径来让应用程序知道它应该和游戏一起启动哪些可执行文件。这是我用来生成列表项的行
output+=“
  • ”+toolslist.tools[I].toolName+”
  • 。除非有办法在不依赖标识符的情况下分别提取键(
    var_toolName
    )和值(
    var_exeToolpath
    )?
    {
       .
       .
       .,
       "tools": {
           "tool1": "D:\\tool1.jar",
           "tool2": "D:\\tool2.jar",
           "tool3": "D:\\tool3.jar"
       }
    }