Ich habe mal einen schemenhaften Aufbau gemacht. Die JSON Datei war vmtl. sowieso nur ein Beispiel von dir. Allerdings ist auch der Aufbau darin merkwürdig und manche Dinge machen auch gar keinen Sinn.
Beispielsweise ist
Blöcke
ein Objekt, das wiederum einzelne Properties hat die ein Array sind, aber nur ein Objekt beinhalten. Ich glaube, dass der Aufbau falsch herum ist. Das solltest du bei deinen Beispielen beachten. Ansonsten kann es schwierig werden zu helfen.
Ausgehend von folgendem JSON String habe ich jetzt mal eine kleine Mini-Procedure gebaut die dir helfen sollte den JSON String in ein Objekt umzuwandeln. Du musst das natürlich noch auf deine Bedürfnisse anpassen.
Disclaimer: Der Code ist nur so im Editor getippt. Also keine Gewähr auf 100%ige Funktionsfähigkeit.
Code:
{
"Blöcke": [
{
"Liste_1": [
"Text_A"
],
"Int_1": 111,
"Txt_1": "Bla...",
"Bool_1": true,
"Real_1": 123.4,
"Liste_4": [
1,
3,
5,
7
]
},
{
"Liste_1": [
"Text_A"
],
"Int_1": 111,
"Txt_1": "Bla...",
"Bool_1": true,
"Real_1": 123.4,
"Liste_4": [
1,
3,
5,
7
]
}
]
}
Wichtig bei dem Delphi JSON Parser ist, dass die Felder mit dem Buchstaben F anfangen. Ansonsten findet der Parser diese nicht und ignoriert sie. Die Felder müssen zudem genau so benannt werden wie sie in der JSON Datei auch lauten. Solltest du sie anders benennen wollen, gibt es gewisse Attribute die du zu den Felder zuweisen kannst. Dann weiß der Parser, dass er sie mit dem Namen
Foo
"ansprechen" soll obwohl sie
Bar
heißen.
Delphi-Quellcode:
type
TBlock = class
private
FListe1: TArray<string>;
FListe4: TArray<Integer>;
FInt_1: Integer;
FTxt_1: string;
FBool_1: Boolean;
FReal_1: Real;
public
property Liste1: TArray<string> read FListe1 write FListe1;
property Liste4: TArray<Integer> read FListe4 write FListe4;
property Int_1: Integer read FInt_1 write FInt_1;
property Txt_1: string read FTxt_1 write FTxt_1;
property Bool_1: Boolean read FBool_1 write FBool_1;
property Real_1: Real read FReal_1 write FReal_1;
end;
TBlocks = TArray<TBlock>;
procedure ParseJson();
var
FileContent: String;
Blocks: TBlocks;
begin
FileContent := TFile.ReadAllText('path\to\file.json');
Blocks := TJson.JsonToObject<TBlocks>(FileContent);
end;