Inno设置:如何从JSON文件的子部分编辑和检索值

Inno设置:如何从JSON文件的子部分编辑和检索值,json,inno-setup,pascalscript,Json,Inno Setup,Pascalscript,我正在创建一个安装程序,需要从JSON文件中编辑和检索值 从部分_2检索和编辑值可以正常工作。问题在于编辑和检索Section_1的子节中的值。下面我们可以看到一个例子: { “第1节”:{ “儿童1”:{ “儿童1”:“价值1”, “儿童1\u 2”:“价值2” }, “儿童2”:“布拉布拉布拉” }, “第2节”:{ “儿童2\u 1”:“价值1”, “儿童2”:“价值2” } } [文件] 来源:“{#ProjectUrl}\JSONConfig.dll”;标志:dont

我正在创建一个安装程序,需要从JSON文件中编辑和检索值

部分_2
检索和编辑值可以正常工作。问题在于编辑和检索
Section_1
的子节中的值。下面我们可以看到一个例子:

{
“第1节”:{
“儿童1”:{
“儿童1”:“价值1”,
“儿童1\u 2”:“价值2”
},
“儿童2”:“布拉布拉布拉”
},  
“第2节”:{
“儿童2\u 1”:“价值1”,
“儿童2”:“价值2”
}    
}  
[文件]
来源:“{#ProjectUrl}\JSONConfig.dll”;标志:dontcopy
[守则]
变量
文件名:WideString;
标准值:宽字符串;
StrLength:整数;
函数JSONQueryString(文件名、节、键、默认值:WideString;
变量值:宽字符串;变量值长度:整数):布尔值;
外部的JSONQueryString@files:jsonconfig.dll stdcall';
函数JSONWriteString(文件名、节、键、,
值:宽字符串):布尔值;
外部的JSONWriteString@files:jsonconfig.dll stdcall';
函数editAppSettingsJson(第1节:字符串;第2节:字符串):布尔;
开始
文件名:='{#appsetingsjsonfile}';
设定长度(标准值,16);
StrLength:=长度(StrValue);
结果:=真;
{无效。如何编辑它?}
如果不是JSONWriteString(文件名为'children_1'、'children_1_1',
第1)节然后
开始
MsgBox('JSONWriteString节_1:子项_1:子项_1_1失败!',
b错误,b_正常);
结果:=假;
结束;
{很好。}
如果不是JSONWriteString(文件名,'Section_2','children_2_1',Section_2)
然后
开始
MsgBox('JSONWriteString节_2:子项_2_1失败!',mbError,
MB_OK);
结果:=假;
结束;
结束;
程序初始化;
变量
值_1:字符串;
值_2:字符串;
开始
值_1:=“值_2”;
值_2:=“值_3”;
editAppSettingsJson(值_1,值_2);
结束;
事先非常感谢您的支持


关于这一点,Diego Via我认为
JSONConfig.dll
不支持嵌套结构

您可以使用。它可以解析嵌套结构。尽管它不像
JSONConfig.dll
那么容易使用,因为它更通用

以下代码将执行以下操作:

var
jsonline:TStringList;
JsonParser:TJsonParser;
JsonRoot,Section1Object,Children1Object:TJsonObject;
Child11Value:TJsonValue;
开始
JsonLines:=TStringList.Create;
JsonLines.LoadFromFile(文件名);
如果是ParseJsonAndLogErrors(JsonParser,JsonLines.Text),那么
开始
JsonRoot:=GetJsonRoot(JsonParser.Output);
如果FindJsonObject(JsonParser.Output,JsonRoot,'Section_1',Section1Object)和
FindJsonObject(JsonParser.Output,Section1Object,'children_1',Children1Object)和
FindJsonValue(JsonParser.Output,Children1Object,'children_1_1',Child11Value)和
(Child11Value.Kind=JVKString)然后
开始
日志(格式('children\u 1\u 1上一个值%s'[
JsonParser.Output.Strings[Child11Value.Index]];
JsonParser.Output.Strings[Child11Value.Index]:=“新值”;
jsonline.Clear;
PrintJsonParserOutput(JsonParser.Output,JsonLines);
JsonLines.SaveToFile(文件名);
结束;
结束;
结束;
代码使用了我的答案中的函数