Inno Setup:使用JSON [英] Inno Setup: Working with JSON
问题描述
在安装期间如何加载和使用JSON配置文件?我可以从文件中读取字符串并将其写入,但是如果要更改配置文件中的某些值,则必须使用VBScript.RegExp
COM对象(这很好,但是开发起来很麻烦且很慢).
How can I load and work with JSON config file during install time? I can read string from file and write it, but if I want to change some value in config file, I have to use VBScript.RegExp
COM object (which is good, but painful and slow to develop).
当前方法:
ExtractTemporaryFile('config.json');
filename := ExpandConstant('{tmp}\config.json');
LoadStringFromFile(filename, conf);
objRegExp := CreateOleObject('VBScript.RegExp');
objRegExp.Pattern := 'test';
conf := objRegExp.Replace(conf, 'test_replace');
SaveStringToFile(filenameOut, conf, False);
是否有更好的方法可以做到这一点?我所需要做的就是替换JSON对象中的某些值,没有多余的魔力.
Is there a better way to do this? All I need is to replace some values in JSON object, no extra magic.
推荐答案
我已经设置了名为 Inno JSON Config
,它允许您使用如下所示的简单JSON配置文件,并允许您读取和写入字符串,整数和布尔值:
I've setup the new project called Inno JSON Config
, which allows you to work with simple JSON config files like shown below and which allows you to read and write string, integer and boolean values:
{
"Section_1":{
"Key_1": "String 1",
"Key_2": "1",
"Key_3": "True"
},
"Section_2":{
"Key_1": "String 2",
"Key_2": "2",
"Key_3": "False"
}
}
用法非常简单(即使当我还要添加句柄支持时).请注意,只能使用Unicode Inno设置(由于需要Int64
支持,因此是最新版本之一):
The usage is quite straightforward (even when I'm going to add handle support as well). Note, that only Unicode Inno Setup (in one of the most recent versions due to a required Int64
support) can be used:
[Files]
Source: "JSONConfig.dll"; Flags: dontcopy
[Code]
function JSONQueryString(FileName, Section, Key, Default: WideString;
var Value: WideString; var ValueLength: Integer): Boolean;
external 'JSONQueryString@files:jsonconfig.dll stdcall';
function JSONQueryBoolean(FileName, Section, Key: WideString;
Default: Boolean; var Value: Boolean): Boolean;
external 'JSONQueryBoolean@files:jsonconfig.dll stdcall';
function JSONQueryInteger(FileName, Section, Key: WideString;
Default: Int64; var Value: Int64): Boolean;
external 'JSONQueryInteger@files:jsonconfig.dll stdcall';
function JSONWriteString(FileName, Section, Key,
Value: WideString): Boolean;
external 'JSONWriteString@files:jsonconfig.dll stdcall';
function JSONWriteBoolean(FileName, Section, Key: WideString;
Value: Boolean): Boolean;
external 'JSONWriteBoolean@files:jsonconfig.dll stdcall';
function JSONWriteInteger(FileName, Section, Key: WideString;
Value: Int64): Boolean;
external 'JSONWriteInteger@files:jsonconfig.dll stdcall';
function BoolToStr(Value: Boolean): string;
begin
Result := 'True';
if not Value then
Result := 'False';
end;
procedure InitializeWizard;
var
FileName: WideString;
IntValue: Int64;
StrValue: WideString;
StrLength: Integer;
BoolValue: Boolean;
begin
{ set the source JSON config file path }
FileName := 'c:\Example.json';
{ allocate string buffer to enough length }
SetLength(StrValue, 16);
{ set the buffer length value }
StrLength := Length(StrValue);
{ query string value }
if JSONQueryString(FileName, 'Section_1', 'Key_1', 'Default', StrValue,
StrLength)
then
MsgBox('Section_1:Key_1=' + StrValue, mbInformation, MB_OK);
{ query integer value }
if JSONQueryInteger(FileName, 'Section_1', 'Key_2', 0, IntValue) then
MsgBox('Section_1:Key_2=' + IntToStr(IntValue), mbInformation, MB_OK);
{ query boolean value }
if JSONQueryBoolean(FileName, 'Section_1', 'Key_3', True, BoolValue) then
MsgBox('Section_1:Key_3=' + BoolToStr(BoolValue), mbInformation, MB_OK);
{ write string }
if not JSONWriteString(FileName, 'Section_1', 'Key_1', 'New value!') then
MsgBox('JSONWriteString Section_1:Key_1 failed!', mbError, MB_OK);
{ write integer }
if not JSONWriteInteger(FileName, 'Section_1', 'Key_2', 123) then
MsgBox('JSONWriteInteger Section_1:Key_2 failed!', mbError, MB_OK);
{ write boolean }
if not JSONWriteBoolean(FileName, 'Section_1', 'Key_3', False) then
MsgBox('JSONWriteBoolean Section_1:Key_3 failed!', mbError, MB_OK);
end;
这篇关于Inno Setup:使用JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!