Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: JSON einlesen - Hilfe für Anfänger

  Alt 21. Dez 2021, 10:59
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;
  Mit Zitat antworten Zitat