Thema: Delphi Casting von TJSONObject

Einzelnen Beitrag anzeigen

Benutzerbild von t2000
t2000

Registriert seit: 16. Dez 2005
Ort: NRW
236 Beiträge
 
Delphi 12 Athens
 
#1

Casting von TJSONObject

  Alt 17. Dez 2024, 08:13
Delphi-Version: 12 Athens
Vielleicht ne grundsätzliche Frage zur Herangehensweise.

Ich bekomme in einer Funktion einen Parameter LParam: TJSONObject
Aus diesem soll das darin enthaltene Feld 'JSONData', welches auch wieder ein JSON-Object ist, herausgeholt werden.

Alles nicht schwer. Hier geht es um das Casting.
Habe den Code seit bestimmt 3 Jahren gehabt und jetzt erst das Problem bemerkt. (Ich kann nicht mit Sicherheit sagen, warum erst jetzt. Aber ich habe den Einsatzzweck ein wenig verändert)

Es soll also eine Kopie der JSON Daten in das Feld FJSONData kopiert werden.
Delphi-Quellcode:
var
  LParam: TJSONObject;
  LVal: TJSONValue;
begin

    LVal := LParam.GetValue( 'JSONData');
    if LVal.Null then
      FJSONData := nil
    else
      //FJSONData := TJSONObject( LVal).Clone as TJSONObject; // hat sehr lange funktioniert. Ja eine möglich Exception war beabsichtigt.
      FJSONData := TJSONObject( TJSONObject( LVal).Clone);
Ich vermute, da LVal ein TJSONValue ist (da ja auch .Clone ein TJSONValue liefert) macht mir das casten mit "as" die Exception. (Die enthaltenen Daten sind ein korrektes JSON Objekt)
Wenn ich nun mit TJSONObject() caste, entfällt die überprüfung und es gibt keine Exception.

Ist meine Vermutung richtig oder sollte das casten mit "as" auch funktionieren?
Was ist vorgefallen, dass dieser Fehler erst nach ca. 3 Jahren auftritt?

Ich habe sehr viele Stellen in meinem Code, bei denen ich "as" nutze (anstelle von TType()) Falls dort ein falscer Typ kommt, ist die Exception sinnvoll. Aber bei TJSONValue : TJSONObject den Fehler zu melden wäre fatal.

Meinungen?

VG
Thomas
(Wir suchen eine(n) Entwickler(in) mit Ambitionen später ggf. die Softwarefirma zu leiten)
Aktuell nicht mehr. Aber ab vielleicht 2024/2025 wird das wieder sehr interessant!
  Mit Zitat antworten Zitat