Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi [gelöst] Json-Datei auslesen über my_jsonObj.TryGetValue liefert immer false (https://www.delphipraxis.net/215245-%5Bgeloest%5D-json-datei-auslesen-ueber-my_jsonobj-trygetvalue-liefert-immer-false.html)

juergen 2. Jun 2024 00:39


[gelöst] Json-Datei auslesen über my_jsonObj.TryGetValue liefert immer false
 
Hallo,

vllt. ist es schon zu spät...
Ich bekomme die Array-Werte aus einer Jsondatei nicht ausgelesen.
Die Json-Datei ist konform (mehrfach im Web geprüft).

So schaut die Json-Datei (auszugsweise aus):
Code:
{
    "FieldAssignmentForTable": [
        {
            "Fieldnumber_0:": "0",
            "Fieldname_0:": "Name",
            "ImportThisField2Table_0____0_is_no__1_is_yes": 1,
            "Fieldnumber_1:": "1",
            "Fieldname_1:": "vom",
            "ImportThisField2Table_1____0_is_no__1_is_yes": 1,
            "Fieldnumber_2:": "2",
            "Fieldname_2:": "bis",
            "ImportThisField2Table_2____0_is_no__1_is_yes": 1,
        }
    ]
}
Delphi-Quellcode:
PROCEDURE JsonDateiFieldAssignment2TableAuslesen;
VAR
  my_jsonObj: TJSONObject;
  i, lInteger_tmp: Integer;
  lJsonPath: STRING;
BEGIN
  my_jsonObj := NIL;
  TRY
    IF FileExists( ExtractFilePath( ParamStr( 0 ) ) + 'FieldAssignmentForTable.json' ) THEN
    BEGIN
      my_jsonObj := TJSONObject.ParseJSONValue( TFile.ReadAllText( ExtractFilePath( ParamStr( 0 ) ) + 'FieldAssignmentForTable.json', TEncoding.UTF8 { * } ) ) AS TJSONObject;
      IF ( NOT Assigned( my_jsonObj ) ) THEN
      BEGIN
        TMSLogger.Warning( '  Die Datei "FieldAssignmentForTable.json" konnte nicht verarbeitet werden! Der Inhalt:    ' +
          TFile.ReadAllText( ExtractFilePath( ParamStr( 0 ) ) + 'FieldAssignmentForTable.json' ) );
      END ELSE
      BEGIN
        // FieldAssignmentForTable"
        FOR I := 0 TO ReadPDFFieldsInTable.FieldCountFromAllPagesFromMasterPDFDocument - 1 DO
        BEGIN
          lInteger_tmp := -1;
          lJsonPath := 'FieldAssignmentForAidaTable.ImportThisField2Table_' + IntToStr( i ) + '____0_is_no__1_is_yes';
         
          IF my_jsonObj.TryGetValue<Integer>( lJsonPath, lInteger_tmp ) THEN
              g_JsonSettingsParams.AddItemToArr_MasterPDF_ImportFields2AidaTable( lInteger_tmp )
          ELSE TMSLogger.Warning( '  Der Wert "ImportThisField2Table_' + IntToStr( i ) + '____0_is_no__1_is_yes' + '" konnte nicht ausgelesen werden.' );
        END;
      END; // Ende IF ( NOT Assigned( my_jsonObj ) )
    END // Ende IF FileExists( gs_PathAndFileNameFromSettingJson )
    ELSE
    BEGIN
      TMSLogger.Warning( '  Die Datei "FieldAssignmentForTable.json" war nicht vorhanden.' );
    END;
  FINALLY
    my_jsonObj.Free;
  END;
END;
Ich habe mir den Wert der Variable "lJsonPath" aus "Überrwachte Ausdrücke" rauskopiert und in der Json-Datei mit den Bezeichnern verglichen. Sah für mich alles OK aus. Und trotzdem liefert
Delphi-Quellcode:
my_jsonObj.TryGetValue<Integer>( lJsonPath, lInteger_tmp )
false.

Sieht jemand das Problem?
Sorry für die langen Bezeichner, ich bekomme das einfach nicht besser hin. Dadurch liest sich der Code schlechter...

Vielen Dank vorab.

t2000 2. Jun 2024 08:20

AW: Json-Datei auslesen über my_jsonObj.TryGetValue liefert immer false
 
Muss diese Zeile

Delphi-Quellcode:
 IF my_jsonObj.TryGetValue<Integer>( lJsonPath, lInteger_tmp ) THEN


nicht auf das Array-Element[n] angewendet werden? Du greifst (glaube ich) da als Objekt drauf.

juergen 2. Jun 2024 09:34

[gelöst] AW: Json-Datei auslesen über my_jsonObj.TryGetValue liefert immer false
 
Hallo,
ursprünglich war ich auf ein Array in de Json-Datei fixiert. So wie ich das Json-File jetzt nutze macht ein Array da keinen Sinn mehr.
Ich habe also in der Json-Datei das Array (eckige Klammern) entfernt und schon läuft alles.

Danke und allen einen schönen Sonntag!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz