使用 nsJSON 插件读取和更新 JSON 文件 (NSIS)

Read And Update JSON File Using nsJSON Plugin (NSIS)

我正在尝试使用 nsJson 插件更新 JSON 文件中的一项数据。

我的 JSON 文件中的数据

{   "header_left_lebel": "LEFT LEBEL",
    "header_center_label": "CENTER LEBEL",
    "base_path": "E:\Workspace\my-demo-app"
}

我想在应用程序安装期间编辑基本路径。

我的读取和更新值的代码

Section "Installation Section"
    SetOutPath "$INSTDIR" 

    GetFullPathName [=12=] ..
    StrCpy $installationPath "[=12=]${applicationName}";This Holds the installation path

    nsJSON::Set /file `$installationPath/config/settings.json`
    nsJSON::Set `base_path` /value `"$installationPath"`
    nsJSON::Serialize /file `$installationPath/config/settings.json`

   WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd

上面的代码更新了 JSON 文件,但它只保留了 base_path

我想保留所有数据,只更新base_path

任何帮助或链接将不胜感激。

使用 NSIS v3.04 和 JSON 插件 v1.1.1.0(2017 年 11 月)时,您的代码对我来说工作正常:

Unicode True

!macro DumpTxtFile file
Push "${file}"
Call DumpTxtFile 
!macroend
Function DumpTxtFile 
Exch [=10=]
Push 
FileOpen [=10=] [=10=] r
loop:
    ClearErrors
    FileRead [=10=] 
    IfErrors done
    DetailPrint 
    Goto loop
done:
FileClose [=10=]
Pop 
Pop [=10=]
FunctionEnd

!include LogicLib.nsh
Section
FileOpen [=10=] "$temp\NSIStest.json" w
FileWrite [=10=] '{   "header_left_lebel": "LEFT LEBEL",$\r$\n'
FileWrite [=10=] '    "header_center_label": "CENTER LEBEL",$\r$\n'
FileWrite [=10=] '    "base_path": "E:\Workspace\my-demo-app"$\r$\n'
FileWrite [=10=] '}'
FileClose [=10=]
!insertmacro DumpTxtFile "$temp\NSIStest.json"

Var /Global installationPath
StrCpy $installationPath "c:\dummy\path"

ClearErrors
nsJSON::Set /file `$temp\NSIStest.json`
nsJSON::Set `base_path` /value `"$installationPath"`
nsJSON::Serialize /format /file `$temp\NSIStest.json`
${If} ${Errors}
  Abort "Unable to update JSON file!"
${EndIf}

!insertmacro DumpTxtFile "$temp\NSIStest.json"
SectionEnd