Prinzipell hast Du das richtig verstanden, Du musst quasi "nur" die Case-Abfrage im Beispiel an Deine Bedürfnisse anpassen.
SetStringsProperty befüllt eine Eigenschaft vom Typ TStrings.
Schau Dir bitte die
Unit TypInfo (bzw. das Gegenstück Deiner Delphiversion) an.
Bei allen Methoden zum Lesen / Schreiben gilt eigentlich folgender Aufbau:
Welches Objekt, welche Eigenschaft, welcher Wert
Siehe u. a.:
http://docwiki.embarcadero.com/Libra...System.TypInfo
Für die unterschiedlichen Eigenschaften gibt es jeweils entsprechende Getter und Setter. Die musst Du "nur" entsprechend Deiner Datentypen aufrufen.
Jetzt rate ich mal, da mir das Ganze irgendwie zu abstrakt ist und ich nicht über eine passende Delphiversion verfüge (sinngmäß sowas):
Delphi-Quellcode:
if (Ljtr.TokenType = TJsonToken.String) then begin
if (LowerCase(Ljtr.Path) = 'irgendwas_was_ein_String_Ist') then begin
SetStrProp(LBotOptions,'ZuSetzendeStringEigenschaft',Ljtr.Value.ToString);
end else
if (LowerCase(Ljtr.Path) = 'anderer_String') then begin
SetStrProp(LBotOptions,'AndereStringEigenschaft',Ljtr.Value.ToString);
end;
end else
if (Ljtr.TokenType = TJsonToken.Integer) then begin
if (LowerCase(Ljtr.Path) = 'irgendwas_was_ein_Integer_Ist') then begin
SetInt64Prop(LBotOptions,'ZuSetzendeIntegerEigenschaft',Ljtr.Value.ToInteger);
end else
if (LowerCase(Ljtr.Path) = 'anderer_String') then begin
SetInt64Prop(LBotOptions,'AndereIntegerEigenschaft',Ljtr.Value.ToInteger);
end;
end else
// alle weiteren Typen abarbeiten und die jeweilige SetGewünschterTypProp nutzen.
Oder, damit es kürzer und (eventuell) lesbarer wird:
Delphi-Quellcode:
var
sLowerPath : String;
sEigenschaft : String;
begin
sLowerPath : LowerCase(Ljtr.Path);
if (Ljtr.TokenType = TJsonToken.String) then begin
if (sLowerPath = 'irgendwas_was_ein_String_Ist') then sEigenschaft := 'ZuSetzendeStringEigenschaft'
else if (sLowerPath = 'anderer_String') then sEigenschaft'AndereStringEigenschaft';
SetStrProp(LBotOptions,sEigenschaft,Ljtr.Value.ToString);
end else
if (Ljtr.TokenType = TJsonToken.Integer) then begin
if (sLowerPath = 'irgendwas_was_ein_Integer_Ist') then sEigenschaft := 'ZuSetzendeIntegerEigenschaft'
else if (sLowerPath = 'anderer_Integer') then sEigenschaft := 'AndereIntegerEigenschaft';
SetInt64Prop(LBotOptions,sEigenschaft,Ljtr.Value.ToInteger);
end else
// alle weiteren Typen abarbeiten und die jeweilige SetGewünschterTypProp nutzen.
end;
oder eventuell:
Delphi-Quellcode:
var
sLowerPath : String;
sEigenschaft : String;
begin
sLowerPath : LowerCase(Ljtr.Path);
if (sLowerPath = 'irgendwas_was') then sEigenschaft := 'WirdZuEigenschaft'
else if (sLowerPath = 'was_anderes') then sEigenschaft := 'AndereEigenschaft'
else if ...;
case Ljtr.TokenType of
TJsonToken.String : SetStrProp(LBotOptions,sEigenschaft,Ljtr.Value.ToString);
TJsonToken.Integer : SetInt64Prop(LBotOptions,sEigenschaft,Ljtr.Value.ToInteger);
// alle weiteren Typen abarbeiten und die jeweilige SetGewünschterTypProp nutzen.
else
// Fehlermeldung, weil ein Typ vergessen wurde?
end;
end;