使用 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
我正在尝试使用 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